前言
上篇文章,实现了显示已经安装的包的窗口和刷新功能,这次我们实现显示包信息的功能
用到的包
这次还要安装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()
效果:
总结
这个项目还是有点难度的,特别是处理字符串,我研究了一上午