我使用 Qt Designer 制作了一个 GUI,我有 20 个或更多 lineEdit 小部件,我正在寻找访问所有这些小部件的正确方法,而不必访问每个小部件...我用伪代码中的示例进行解释:
这就是我不想要的:
lineEdit1.setText("Value = 1")
lineEdit2.setText("Value = 2")
lineEdit3.setText("Value = 3")
and so on, up to
lineEdit20.setText("Value = 20")
我正在寻找这样的东西:
for i in xrange(1,21):
lineEdit(i).setText("Value = whatever")
问题是,据我所知,当拖放小部件时,Qt Designer会自动在名称末尾添加一个数字...lineEdit1,lineEdit2,....所以之后我不知道如何在代码中访问所有这些。
最佳答案
首先,您不必接受 Qt Designer 中自动分配的名称。只需将 objectName
属性设置为最合适的值即可。
要迭代小部件组,可以使用多种 QObject 方法。
最强大的是findChildren它可以根据对象/小部件的类递归搜索它们:
for child in self.findChildren(QtGui.QLineEdit):
child.setValue(value)
还有他们的对象名称:
rgx = QtCore.QRegExp('lineEdit[0-9]+')
for child in self.findChildren(QtGui.QLineEdit, rgx):
child.setValue(value)
但更简单的技术是使用 Qt Designer 将所有小部件放入容器小部件(例如 QWidget、QFrame、QGroupBox 等)中,然后使用非递归 children循环它们的方法:
for index, child in enumerate(self.groupBox.children()):
child.setValue(value[index])
您可能还想考虑使用 QFormLayout ,它提供了一种更加结构化的做事方式。这在 Qt Designer 中可用:只需将 Form Layout
拖放到主窗体上,然后使用右键单击菜单中的 Add form layout row
向其中添加小部件.
关于python - 访问多个小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20597545/