Python Forum

Full Version: Get class 's children on init
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
class DataForm(QtGui.QGroupBox):
   def __init__(self, parent, task=None):
       QtGui.QWidget.__init__(self, parent)   

       self.labelHello = QtGui.QLabel(self)
       self.labelHello.setText("This is My Widget")


       children = self.children()
I 'm trying to get the children in the init of the class.
It' a GroupBox with two text boxes in it.
But it gets no children, returns empty.
I can't find any documentation for a .getChildren(), but there is a .findChildren().  Have you tried that?
Example of usage: http://nullege.com/codes/show/src@g@[email protected]
 # assume "expanded = True"

       for widget in self.findChildren(QtGui.QWidget):
           widget.setHidden(not expanded)
Sorry, I meant: children = self.children()
Yes I've tried what you suggest, it also fails.

Maybe I should get the children not in init but in some other function (I wonder which one?) because they, may, have not yet been created?


This class 'promotes' a QGroupBox to 'DataForm', maybe my constructor is incorrect?
DataForm(QtGui.QGroupBox):

   def __init__, parent):
       QtGui.QGroupBox.__init__(self, parent)
I tried in showEvent, now it works BUT brings ALL the widgets of the form!!! and not only the ones in my widget (my GroupBox):


class DataForm(QtGui.QGroupBox):
   signal_hided = QtCore.pyqtSignal()
   signal_shown = QtCore.pyqtSignal()
   def __init__(self, parent):
       QtGui.QGroupBox.__init__(self, parent)

def showEvent(self, event):
   super(DataForm, self).showEvent(event)
   self.signal_shown.emit()

   children = self.children()
   for widget in children:
       print('DataForm:showEvent=', widget.objectName()) 
On the mousePressEvent  I get the correct children!!


def mousePressEvent (self, event):
   children = self.findChildren(QtGui.QTextEdit)  
   for widget in children:
       print('DataForm:getChildren=', widget.objectName())
So maybe it's just in which event I use this code?
In which event do you think I should put it?

Init is rejected, paint event is rejected, showEvent rejected too...