QLineEdit 对象的 PyQt 集合

Posted

技术标签:

【中文标题】QLineEdit 对象的 PyQt 集合【英文标题】:PyQt Collection of QLineEdit objects 【发布时间】:2011-11-17 22:12:38 【问题描述】:

PyQt 中有什么方法可以获取所有 QLineEdit 对象的集合吗?

我正在尝试添加一个重置按钮,该按钮将清除表单上所有 QLineEdit 中的所有文本,因此我正在寻找一种方法来循环遍历所有 QLineEdit 对象,而不是在我的重置函数中将它们全部列出这将连接到重置按钮。

谢谢。

【问题讨论】:

为什么不首先将它们存储在dictlist 中? 我可能会,但这最终会产生列出所有这些的工作和将它们全部列出的脆弱性(然后,如果我重命名、删除或添加,我还有一个地方可以更新一个字段)。以编程方式获取列表应该会生成更短、更易于维护的代码。 实际上我是在谈论使用字典而不是变量,而不是除了变量之外的字典。更像self.edits["some_name"] = QtGui.QLineEdit() 而不是self.some_name = QtGui.QLineEdit()。如果有的话,这应该在逻辑上引入很少的变化。 啊,这更有意义,如果我手动编写所有的 GUI,这可能是一个好方法,但我使用 QT Designer 来完成大部分的 GUI 设计和然后做一些小的微调并手动放入实际的程序逻辑。 【参考方案1】:

如果所有行编辑都有父级,您可以使用:

for child in parent.findChildren(QtGui.QLineEdit):
    child.clear()

或者可能:

for widget in qApp.allWidgets():
    if isinstance(widget, QtGui.QLineEdit):
        widget.clear()

【讨论】:

第二个正是我需要的。谢谢。 我在将近 2 年后问这个问题,但是如果我只想清除一个特定窗口的小部件怎么办?这将清除 所有 行编辑,对吗?哪一个是行编辑的父级? QWindow 子类?抱歉,我才刚刚开始,我有点迷路了。 @SamiaRuponti 这实际上取决于您的应用程序的结构。您应该提出一个新问题并显示您的代码。

以上是关于QLineEdit 对象的 PyQt 集合的主要内容,如果未能解决你的问题,请参考以下文章

如何通过按 Escape 键重置 QLineEdit 文本?

python PyQt4中如何获得QTextEdit的内容获得QLineEdit的内容有QLineEdit.text(),那QTextEdit呢?

PyQt / PySide - 小部件的实际大小

PyQt4 - QLineEdit() 和 QCheckbox()

pyqt - 在 QLineEdit 中达到一定数量的字母后激活 QCompleter

PyQt4:结合 textChanged 和 editingFinished 为 QLineEdit