- QTableView展示分析结果
主要内容 #
完成效果 #
本节课程是字数统计小程序的第三节,完成本节课程,能实现将文本分析结果展示在QTableview中。
收获 #
学习完本节内容,我们会了解QTableview的创建方法,并在其中展示统计结果。
1.QTableView展示分析结果 #
QTableView类用于以表格形式输出信息,可通过自定义的数据模型(本例中选择QStandardItemModel)来显示数据,通过setModel来绑定数据源。
QStandardItemModel 是标准的以项数据(item data)为基础的标准数据模型类,通常与 QTableView 组合成 Model/View 结构,实现通用的二维数据的管理功能。具体解释如下:
以下为示例代码:
from PyQt5.QtWidgets import QWidget, QTextEdit, QVBoxLayout, QFileDialog, QHeaderView, QApplication, QPushButton, QTableView from PyQt5.QtGui import QStandardItemModel, QStandardItem import sys, csv class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): button = QPushButton('分析') # 添加一个按钮 # 点击按钮,触发clicked信号,连接到槽函数getAnalyse button.clicked.connect(self.getAnalyse) textEdit = QTextEdit() # 创建一个多行文本编辑框 self.layout = QVBoxLayout() # 创建一个垂直盒布局 self.layout.addWidget(button) # 将按钮添加到布局中 self.layout.addWidget(textEdit) # 将文本编辑框添加到文本中 self.setLayout(self.layout) # 将布局应用到程序窗口 filename, filetype = QFileDialog.getOpenFileName(self, '打开文件', 'D:\\Python_Tips\\Dashima\\pics', 'Text Files (*.txt)') # 弹出打开文件对话框 if filename: # 如果文件名不为空,即选择了一个文件 # 则打开并读取名为filename的文件内容,encoding='utf-8 可以兼容中文 with open(filename, 'r', encoding='utf-8') as data: # 则打开并读取名为filename的文件内容,encoding='utf-8 可以兼容中文 self.content = data.read() # read方法可以读取txt文档的所有内容 textEdit.setText(self.content) # 把文档内容显示在文本框中 self.table = QTableView() # 创建一个QTableView对象 self.setGeometry(300, 300, 500, 800) self.setWindowTitle('字数统计小程序') self.show() def getAnalyse(self): # 槽函数 用来分析统计文本字数 content2 = set(self.content) # set函数去除文本内容中的重复文字 content2 = list(content2) # 再转化为列表 self.countList = [] # 用来储存统计结果 for i in content2: # 遍历content2的每一个字符 # ' ' 是空格, '\n' 是换行符, '\u3000'是全角的空格符,三者都不属于我们能看见的字符,无需统计 if i == ' ' or i == '\n' or i == '\u3000': continue # 直接跳到下一次循环 m = self.content.count(i) # count()方法计算字符i在self.content中出现的次数 self.countList.append((m, i)) # 将出现的次数和对应文字组成元组,并添加到统计列表countList中 self.countList.sort(reverse=True) # 将统计列表,按照出现的次数降序排列 self.numItem = len(self.countList) # 获取统计列表的长度 self.model = QStandardItemModel(self.numItem, 2) # 创建一个模型实例 self.model.setHorizontalHeaderLabels(['出现次数', '文本']) # 设置表头的名称 for row in range(self.numItem): # 循环一次给模型的每一个位置赋值 for column in range(2): # 获取数据,column=0时是文字出现次数,column=1时是该文字 item = self.countList[row][column] # 给模型的第row行,第column列添加数据 self.model.setItem(row, column, QStandardItem(str(item))) self.table.setModel(self.model) # 将模型应用到tableview上去 # 让表格的所有列自动拉伸,充满界面 self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) self.layout.addWidget(self.table) # 将tableview加到布局中 app = QApplication(sys.argv) # 创建应用程序 ex = Example() # 创建窗口对象 sys.exit(app.exec_()) # 设置关闭窗口后结束进程
拓展练习:尝试更改各个控件的布局。
小结 #
习题 #
- 习题1:尝试自定义一个txt文件,进行词频统计并排序,然后QTableView展示结果。