我讨厌那个黑糊糊的窗口(2):显示已安装的包(下)

文章介绍了如何在Python中利用Qt库和easygui模块创建一个GUI应用,展示已安装包的信息。通过监听表格选择事件,调用`pipshow`获取包详情,并以对话框形式显示。应用包括显示包名、版本、类型等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 前言 

上篇文章,实现了显示已经安装的包的窗口和刷新功能,这次我们实现显示包信息的功能

用到的包

这次还要安装easygui,安装命令:

pip install easygui

然后在上一篇的代码里面输入

import easygui

实现

先来处理字符串:

def on_click(self):
        t = ['库名:', '版本:', '类型:', '官网:', '作者:', '作者邮箱:', '许可证:', '存储路径:', '依赖库:', '被依赖库:']
        ns = []
        z = ''
        table = self.sender()
        self.selectedRowNo = table.currentRow()  # 获得选中行号
        # print(self.data[self.selectedRowNo])  # 获得选中行数据
        a = list(self.data[self.selectedRowNo])
        ans = os.popen(f"pip show {a[0]}")
        for i in list(ans):
            a = "".join(i)
            c = a.split(": ")
            ns.append(c[1])
        # print(ns)
        for j in range(len(t)):
            # pass
            z += t[j]

            z += ns[j]
        # print(z)
        easygui.msgbox(z, '库信息', '确定')

然后设置信号槽:

# 将表格项目改变信号到on_click槽函数
self.table.itemSelectionChanged.connect(self.on_click)

完整代码

# coding=utf-8


import sys
import os
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import *
import pl
import easygui



column_names = ['包', '版本']


class MyWindow(QWidget):

    def __init__(self):
        super().__init__()
        self.selectedRowNo = None
        self.data = pl.p_l()
        self.initUI()



    def initUI(self):
        self.resize(370, 640)
        self.setWindowTitle('python包')  # 设置窗口标题

        layout = QVBoxLayout(self)
        btnup = QPushButton("刷新")
        # 创建表格控件对象
        self.table = QTableWidget()
        layout.addWidget(btnup)
        layout.addWidget(self.table)
        btnup.clicked.connect(self.c_s)
        # 设置表格行数
        self.table.setRowCount(len(self.data))
        # 设置表格列数
        self.table.setColumnCount(len(column_names))
        # 设置表格字体
        self.table.setFont(QFont("微软雅黑", 10))
        # 设置表格禁止编辑
        self.table.setEditTriggers(QAbstractItemView.EditKeyPressed)
        # 设置表格列标签
        self.table.setHorizontalHeaderLabels(column_names)
        # 获得列视图
        horizontalHeader = self.table.horizontalHeader()
        # 设置表格列宽根据内容自适
        horizontalHeader.setSectionResizeMode(QHeaderView.ResizeToContents)

        # 获得行视图
        verticalHeader = self.table.horizontalHeader()
        # 设置表格行高根据内容自适应
        verticalHeader.setSectionResizeMode(QHeaderView.ResizeToContents)
        #   设置表格列标签字体
        horizontalHeader.setFont(QFont("微软雅黑", 10))
        # 设置表格选择行为
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)

        # 设置表格数据
        for row in range(len(self.data)):
            for col in range(len(self.data[row])):
                # 设置表格单元格(row, col)数据,每一个单元都是QTableWidgetItem对象
                self.table.setItem(row, col, QTableWidgetItem(self.data[row][col]))

        # 将表格项目改变信号到on_click槽函数
        self.table.itemSelectionChanged.connect(self.on_click)

        # 槽函数

    def on_click(self):
        t = ['库名:', '版本:', '类型:', '官网:', '作者:', '作者邮箱:', '许可证:', '存储路径:', '依赖库:', '被依赖库:']
        ns = []
        z = ''
        table = self.sender()
        self.selectedRowNo = table.currentRow()  # 获得选中行号
        # print(self.data[self.selectedRowNo])  # 获得选中行数据
        a = list(self.data[self.selectedRowNo])
        ans = os.popen(f"pip show {a[0]}")
        for i in list(ans):
            a = "".join(i)
            c = a.split(": ")
            ns.append(c[1])
        # print(ns)
        for j in range(len(t)):
            # pass
            z += t[j]

            z += ns[j]
        # print(z)
        easygui.msgbox(z, '库信息', '确定')
    def c_s(self):
        self.data = pl.p_l()
        # 设置表格行数
        self.table.setRowCount(len(self.data))
        # 获得列视图
        h = self.table.horizontalHeader()
        # 设置表格列宽根据内容自适
        h.setSectionResizeMode(QHeaderView.ResizeToContents)

        # 获得行视图
        v = self.table.horizontalHeader()
        # 设置表格行高根据内容自适应
        v.setSectionResizeMode(QHeaderView.ResizeToContents)
        #   设置表格列标签字体
        h.setFont(QFont("微软雅黑", 10))
        # 设置表格数据
        for row in range(len(self.data)):
            for col in range(len(self.data[row])):
                # 设置表格单元格(row, col)数据,每一个单元都是QTableWidgetItem对象
                self.table.setItem(row, col, QTableWidgetItem(self.data[row][col]))

def main():
    app = QApplication(sys.argv)  # 创建应用程序对象
    window = MyWindow()
    window.show()  # 显示窗口
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

效果:

 总结

这个项目还是有点难度的,特别是处理字符串,我研究了一上午

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值