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

本文介绍了如何使用Python的PyQt5库创建一个窗口应用,展示已安装的Python包。通过命令行获取包列表,然后利用QtableWidget进行显示,并添加按钮实现列表的刷新功能。文章强调了列表设置和刷新的难点,提供了完整的代码示例。
摘要由CSDN通过智能技术生成

前言

要查看已安装的包,必须先打开命令提示符,然后输入pip list才能查看(如下图)

但是很多人都不喜欢命令提示符那个黑糊糊的窗口,(我也是)不喜欢的扣个一

要用到的包

我们来做一个用显示已经安装的包的窗口
需要用到的包:

PyQt5

上一篇已经讲过怎么安装配置,这里不再赘述

用到的控件

按钮控件:QpushButton

布局管理器:Qboxlayout

可以让其中的控件沿垂直或水平方向布局

表格控件:QtableWidget

由行和列构成,行和列都有标题,可以自定义行列的标题,还可以修改数据

实现

这次我们不用qt设计师,这次我们一行一行的敲

我们新建一个文件,里面这样写:

  1. def p_l():
        import os
        text = os.popen("pip list")
        s = 0
        p = []
        #
        #
        # print(c)
        for i in text:
            a = "".join(i)
            c = a.split()
            if s > 1:
                p.append(c)
            # print(c)
            # print(f"执行{s}次")
            s += 1
        # print(p)
        return p

把它命名为pl

用来返回已安装的库

再新建一个文件把它放在和pl同一个目录上

我们先把基础的代码写好

  1. # 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包')  # 设置窗口标题

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


    if __name__ == '__main__':
        main()

然后创建一个按钮对象,这个是来刷新表格的

  1. btnup = QPushButton("刷新")

然后创建一个表格对象这个来显示已经安装的包 

  1. # 创建表格控件对象
    self.table = QTableWidget()

然后设置布局管理器

        layout = QVBoxLayout(self)
       
       
        # 将表格放到布局管理器中
        layout.addWidget(btnup)
        layout.addWidget(self.table)
        btnup.clicked.connect(self.c_s)

然后开始设置表格

  1. # 设置表格行数
            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]))

写信号糟的代码

  1.     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]))

运行结果

如图所示

b160087c21c343b28bcd928639432e2d.png

 

我们先安装一个新包

0bde6f8ed02b4dbfb042ee5bc71be6ac.png

 

然后点刷新,那个新包就显示出来了

9f2148eb3b9746ad8d02b1b565dd7f3c.png

 

总结

这个有点难度

难在列表的设置和刷新

特别是那个列表的刷新,我研究了很久

还有大家有什么想看的可以在评论区留言

最后大家不要忘了来一个三连,

下一篇来说如何显示库信息

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值