Qt5 Python GUI 编程指南
创建时间:2018-12-10  访问量:9349  9  1

Qt5 Python GUI 编程指南

使用 List 部件

以更简易并可扩展的格式显示多个值时,你可以使用List部件,它是QListWidget类的实例。List部件可以显示多个选项,这些选项不仅可以显示还可以被编辑和删除。你可以从List部件中一次添加或删除一个列表选项,或者您可以通过使用列表项的内部模型来一次性设置所有列表项。

准备

列表中的选项是QListWidgetItem的实例。QListWidget中提供的方法如下所示:

  • insertItem():这个方法用于将拥有文本的新选项插入到List部件中的指定位置。

  • insertItems():这个方法从提供的列表中指定的开始位置插入多个选项。

  • count():这个方法返回列表中选项的数量。

  • takeItem():这个方法删除并返回List部件中指定行的选项。

  • currentItem():这个方法返回列表中当前选项。

  • setCurentItem():这个方法用于替换列表中的当前选项。

  • addItem():这个方法在List部件后添加特定文本的选项。

  • addItems():这个方法在List部件后添加列表方式提供的多个选项。

  • clear():这个方法会删除List部件中所有选项。

  • currentRow():这个方法返回当前选中列表项的行号。如果没有选中任何列表项,它就返回-1。

  • setCurrentRow():这个方法是在列表中选择指定的行。

  • item():这个方法返回特定行的列表项。

QListWidget类中的信号如下所示:

  • currentRowChanged():当当前列表项的行发生改变时触发此信号

  • currentTextChanged():当当前列表项中的文本发生更改时,将发出此信号

  • currentItemChanged():当当前列表项的焦点发生更改时,将发出此信号

如何去做...

因此,让我们创建一个应用程序,它通过List部件显示某些诊断测试,当用户从List部件中选择任何测试时,所选的测试将通过Label部件进行显示。下面是创建应用程序的步骤:

  1. 新建一个基于Dialog without Buttons模板的应用程序并拖动两个Label部件和一个List部件放到窗体上。

  2. 将第一个Label部件的text属性设置为Choose the Diagnosis Tests。

  3. 将List部件的objectName属性值设置为listWidgetDiagnosis。

  4. 将Label部件的objectName属性设置为labelTest。

  5. 删除labelTest部件黙认的text属性,我们将通过代码来使其显示选中的诊断测试。

  6. 为了通过List部件显示诊断测试,右击List部件打开上下文菜单,选择Edit Items选项。

  7. 通过单击底部的+按钮输入每一个测试,以一个一个的添加一些诊断测试,如下截图所示:

    

  1. 将应用程序保存为demoListWidget1.ui。窗体如下截图所示:

    

    使用pyuic5命令工具,将.ui(XML)文件转换成Python代码。生成的Python代码为demoListWidget1.py,可以在本书的源码中看到。

  1. 创建一个名为callListWidget1.pyw的Python脚本,并导入demoListWidget1.py代码,以调用用户界面设计,即通过代码显示List部件中选中的诊断测试。Python脚本的代码callListWidget1.pyw如下所示:

import sys
from PyQt5.QtWidgets import QDialog, QApplication
from demoListWidget1 import *
class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.listWidgetDiagnosis.itemClicked.connect(self.
        dispSelectedTest)
        self.show()
    def dispSelectedTest(self):
        self.ui.labelTest.setText("You have selected
        "+self.ui.listWidgetDiagnosis.currentItem().text())
if __name__=="__main__":
	app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

你可以看到List部件中的itemClicked事件与dispSelectedTest方法相关联了。也就是说,在单击List部件中的任何一个列表选项时,都会调用dispSelectTest()这个方法,它将使用List部件中的currentItem()方法通过labelTest标签来显示List部件中选中的选项。

运行应用程序,你将看到List部件中显示了几个诊断测试;在List部件中选中一个测试,这个测试就会通过Label部件显示出来,如下截图所示: