【问题标题】:Looping over widgets inside widgets inside layouts在布局内的小部件内循环小部件
【发布时间】:2016-09-14 00:49:37
【问题描述】:

与我们这里的问题 Loop over widgets in PyQt Layout 类似,但更复杂...

我有

QVGridLayout
   QGroupBox
      QGridLayout
         QLineEdit

我想访问 QLineEdit 但到目前为止我不知道如何访问 QGroupBox 的子项

        for i in range(self.GridLayout.count()):
            item = self.GridLayout.itemAt(i)
            for i in range(item.count()):
                lay = item.itemAt(i)
                edit = lay.findChildren(QLineEdit)
                print edit.text()

谁能指出我正确的方向?

【问题讨论】:

    标签: python pyqt qgroupbox


    【解决方案1】:

    当一个小部件被添加到一个布局时,它会自动成为它所设置的布局的小部件的子级。所以这个例子简化为两行:

    for group in self.GridLayout.parentWidget().findChildren(QGroupBox):
        for edit in group.findChildren(QLineEdit):
            # do stuff with edit
    

    但是,findChildren递归的,所以如果所有的行编辑都在组框中,这可以简化为单行:

    for edit in self.GridLayout.parentWidget().findChildren(QLineEdit):
        # do stuff with edit
    

    【讨论】:

      【解决方案2】:

      排序:

      for i in range(self.GridLayout.count()):
           item = self.GridLayout.itemAt(i)
           if type(item.widget()) == QGroupBox:
                child =  item.widget().children()
      

      我必须使用 item.widget() 来访问 GroupBox。 希望这对一些人有所帮助。

      【讨论】:

      • 什么是网格布局