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

Qt5 Python GUI 编程指南

从一个 List 部件中选择多个列表项并显示在另一个 List 部件中

在前面的应用程序中,你仅仅从List部件选项中选择了一个诊断测试选项。如果我想从List部件选择多个选项怎么办呢?对于多个选项的情形,就不能使用Line Edit部件了,你需要另一个List部件来存储选中的诊断测试。

如何去做...

让我们来创建一个应用,将通过List部件来显示一些诊断测试,即当用户选中List部件中的任何一个测试时,我们就将这些选中的选项显示在另一个List部件中:

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

  2. 将Label部件的text属性设置为Diagnosis Tests并将另一个设置为Selected tests are。

  3. 将第一个List部件的objectName属性设置为listWidgetDiagnosis并将第二个List部件的objectName属性设置为listWidgetSelectedTests。

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

  5. 通过单击+按钮并输入每个测试来一个一个的添加诊断测试。

  6. 为了启用从List部件中选择多个选项,选择listWidgetDiagnosis部件,并从Property Editor窗口中,将selectionMode属性中的值从SingleSelection改为MultiSelection。

  7. 将应用保存为demoListWidget2.ui。窗体如下截图所示:

    

    通过使用pyuic5工具,将XML文件demoListWidget2.ui转换成Python代码,文件名为demoListWidget2.py。生成的Python代码,demoListWidget2.py文件,可以在本书附带源码中看到。

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

import sys
from PyQt5.QtWidgets import QDialog, QApplication
from demoListWidget2 import *
class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.listWidgetDiagnosis.itemSelectionChanged.connect
        (self.dispSelectedTest)
        self.show()
    def dispSelectedTest(self):
        self.ui.listWidgetSelectedTests.clear()
        items = self.ui.listWidgetDiagnosis.selectedItems()
        for i in list(items):
        self.ui.listWidgetSelectedTests.addItem(i.text())
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

你可以看到List第一个List部件中的itemSelectionChanged事件与dispSelectedTest()方法相连接。也就是说,从List部件中选中或取消选中任何列表选项时,就会调用dispSelectedTest()方法。这个dispSelectedTest()方法会调用List部件中的selectItems()方法来获取选中的选英。此后,使用for循环,所有选中的选项通过调用addItem()方法都被添加到第二个List部件中。

运行应用程序,你将看到List部件中显示了一些诊断测试;从第一个List部件中选中任意一些测试,所有选中的测试都将通过每二个List部件列表项显示出来,如下截图所示: