尽管你可以手动通过Property Editor向List部件中添加选项,但有时候你需要通过代码动态的向List部件中添加选项。让我们创建一个应用程序来解释这个向List部件中添加选项的过程。
在这个应用程序中,你将使用Label、Line Edit、Push Button和List Widget。初始时,List部件的选项是空的,并将提示用户在Line Edit中输入期望的食物选项并单击Add to List按钮。输入的食物选项就会被添加到List部件中。所有后续的食物都被依次添加在上一条选项的下方。
通过执行以下步骤来了解这些选项是如何被添加到List部件中的:
我们开始基于Dialog without Buttons模板新建一个应用程序并拖动Label、Line Edit、Push Button和List Widget放到窗体上。
将Label和Push Button部件的text属性分别设置为Your favourite food item 和 Add to List。
将Line Edit的 objectName 的属性设置为 lineEditFoodItem,将Push Button的 objectName属性设置为pushButtonAdd,再将List部件的objectName属性设置为listWidgetSelectedItems。
将应用保存为demoListWidget3.ui。窗体截图如下所示:
通过执行pyuic5工具,将xml文件demoListWidget3.ui会被转换成Python代码文件demoListWidget3.py。生成的Python文件demoListWidget3.py可以在本书的源码中找到。
创建一个名为callListWidget3.pyw的Python脚本文件,导入demoListWidget3.py的Python代码以调用用户界面设计并通过用户将Line Edit部件中输入的食物选项添加到List部件中。callListWidget3.pyw中的Python代码如下所示:
import sys
from PyQt5.QtWidgets import QDialog, QApplication
from demoListWidget3 import *
class MyForm(QDialog):
def __init__(self):
super().__init__()
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.ui.pushButtonAdd.clicked.connect(self.addlist)
self.show()
def addlist(self):
self.ui.listWidgetSelectedItems.addItem(self.ui.
lineEditFoodItem.text())
self.ui.lineEditFoodItem.setText('')
self.ui.lineEditFoodItem.setFocus()
if __name__=="__main__":
app = QApplication(sys.argv)
w = MyForm()
w.show()
sys.exit(app.exec_())
Push Button 的 clicked() 事件与 addList 函数相关联。因此,在Line Edit部件中输入文本就会被添加到List部件中,当用户选择Add to List按钮时,addList函数就会被调用。这个addList函数会获取到Line Edit中输入的文本并将其添加到List部件中。然后清除Line Edit部件中的文本,并设置Line Edit部件焦点,再将用户输入不同的文本。
在下面的截图中,你可以看到用户在Line Edit部件中输入的文本,这个文本将由用户通过选择Add to List按钮添加到List部件中: