Qt5 Python GUI 编程指南
创建时间:2018-12-10  访问量:5292  7  0

Qt5 Python GUI 编程指南

使用Table部件显示表格数据

在本节,我们将学习以表格的形式显示数据,也就是说,以行和列的形式显示数据。我们将显示不同酒店的房间类型和它们各自每天的房价。

准备

在开始本节之前,先让我们了解下Table Widget。

Table Widget

Table Widget用于显示表格形式的数据,按行和列进行排列。Table Widget是 QTableWidget 类的一个实例并且这些项会显示在表格的不同的行和列中,它们都是QTableWidgetItem类的实例。这里是QTableWidget类提供的一些方法如下所示:

  • setRowCount():这个方法用于你想要在Table Widget中定义行的数量

  • setColumnCount():这个方法用于在Table Widget中定义所需要的列的数量

  • rowCount():这个方法返回表格中的行数

  • columnCount():这个方法返回表格中的列数

  • clear():这个方法用于清空表格中的项

  • setItem():这个方法为表格中给定的行和列设置内容

QTableWidgetItem类

正如前面提到的,TableWidget中显示的项都是QTableWidgetItem类的实例。可以将文本,图像或任可其它部件作为Table Widget中的项显示。这里是QTableWidgetItem类提供的方法:

  • setFont():这个方法为Table Widget项的文本标签设置字体

  • setCheckState():向这个方法传递布尔值True时就选中这个表格项,传递False值就取消选中Table Widget的项

  • checkState():这个方法返回布尔值True表示Table Widget的项被选中,否则返回False

现在让我们来创建一个应用程序来展示Table Widget项是如何显示这些信息的。

如何去做...

信息以表格的形式显示比以传统的段落形式显示更具有组织性,可读性,并且更易于比较数据。这里创建一个通过Table Widget部件显示数据的应用程序的步骤:

  1. 打开Qt Designer并基于Dialog widthout Buttons模板新建一个应用程序。

  2. 拖动一个Table Widget项放到窗体上。

  3. 为了将黙认的长度设置为3行3列,在Property Editor窗口中,将rowCount和columnCount的值分别设置为4和2。

  4. 为了显示行和列的头部,黙认选中horizontalHeaderVisible和verticalHeaderVisible属性。

  5. 将应用保存为DemoTableWidget.ui。这个Table Widget项的显示如下截图所示:

    使用pyuic5命令将其.ui的XML文件生成Python代码。生成的Python脚本名为DemoTableWidget.py,可以在本书源码中找到。

  6. 创建一个名为callTableWidget.pyw的Python脚本并导入上述Python代码DemoTableWidget.py,它使我们能够调用用户界面设计并显示Table Widget项的信息。Python脚本代码callTableWiget.pyw如下所示:

import sys
from PyQt5.QtWidgets import QDialog, QApplication,QTableWidgetItem
from DemoTableWidget import *
class MyForm(QDialog):
    def __init__(self,data):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.data=data
    	self.addcontent()
    def addcontent(self):
        row=0
        for tup in self.data:
        	col=0
        for item in tup:
        	oneitem=QTableWidgetItem(item)
    		self.ui.tableWidget.setItem(row, col, oneitem)
            col+=1
            row+=1
            data=[]
            data.append(('Suite', '40))
            data.append(('Super Luxury', '30))
            data.append(('Super Deluxe', '20))
            data.append(('Ordinary', '10))
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm(data)
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

如果你想要以的3行4列的表格形式显示信息,创建一个名为data的列表并存放4个元组,每个元组包含两个元素,roomtypes和roomRent。在addcontent方法中,你可以从data列表中获取一个元组并将其赋值给一个临时的tup变量。这个tup变量包含两个元素,房间类型与房价。使用另一个for循环,你可以从tup变量中获取每一个元素;也就是说,你可以获取房间类型与房价并将其赋值给item变量。这个item变量中的内容然后转换成QTableWidgetItem的一个实例并赋值给oneitem,反过来再通过setItem()方法赋值给它并将其显示在Table Widget中特定的行和列的位置。如下截图所示: