python - 访问多个小部件

标签 python qt widget qlineedit

我使用 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/

相关文章:

java - 如何设置 SashForm 子项默认大小

python - 从 CNN 层转到线性层时层尺寸不匹配

c++ - 如何在 QML 文件中使用属性名称作为字符串查找 QML 上下文属性

Qt - 创建小部件的平滑圆角

qt - 组合框qml的动态翻译

c++ - 未定义对`Histogram::Histogram(QWidget*) 的引用

swift - IntentHandler 不适用于 widgetFamily

python - 如何读取文件夹中的所有文本文件内容并将这些内容作为行复制到一个 excel 文件中

python - Matplotlib 绘图以错误的方式绘制

python - 数组_a = 数组_b[ :] but changing a changes b aswell (numpy)