【问题标题】:How to get all child components of QWidget in pyside/pyqt/qt?如何在pyside/pyqt/qt中获取QWidget的所有子组件?
【发布时间】:2012-02-22 13:15:34
【问题描述】:

我正在使用 pyside(qt) 开发桌面应用程序,我想访问(迭代)QWidget 的所有行编辑组件。在 qt 中,我找到了两种方法 findChildfindChildren 但没有找到合适的示例,并且我的代码显示错误,'form' 对象没有属性 'findChild'。 这里的 'form' 是 Qwidget 表单,由 lineEdit、comboboxes、Qpushbuttons 等组件组成。

代码:

lineEdits = form.findChild<QLineEdit>() //This is not working

lineEdits = form.findChild('QLineEdit) //This also not working

【问题讨论】:

    标签: python qt pyside children


    【解决方案1】:

    findChildfindChildren 的签名在 PySide/PyQt4 中是不同的,因为在 Python 中没有真正等效的 C++ 强制转换语法。

    相反,您必须传递一个类型(或类型中的tuple)作为第一个参数,并将一个可选字符串作为第二个参数(用于匹配objectName)。

    所以你的例子应该是这样的:

    lineEdits = form.findChildren(QtGui.QLineEdit)
    

    请注意,findChildfindChildrenQObject 的方法 - 因此,如果您的表单没有它们,则它不能是 QWidget(因为所有小部件都继承 QObject)。

    【讨论】:

    【解决方案2】:

    使用这个方法QObject::findChildren(onst QString & name = QString())不带参数。

    省略 name 参数会导致匹配所有对象名称。

    这里是 C++ 示例代码:

    QList<QLineEdit*> line_edits = form.findChildren<QLineEdit*>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2013-04-09
      • 1970-01-01
      相关资源
      最近更新 更多