Comment obtenir tous les composants enfants de QWidget dans pyside / pyqt / qt?
Question
Je développe une application de bureau utilisant pyside (qt), je souhaite accéder (itérer) à tous les composants d'édition de ligne de QWidget.Dans qt j'ai trouvé deux méthodes findChild et findChildren mais il n'y a pas d'exemple correct trouvé et mon code montre une erreur, l'objet 'form' n'a pas d'attribut 'findChild'. Ici 'form' est la forme Qwidget composée de composants lineEdit, comboboxes, Qpushbuttons etc.
Code:
lineEdits = form.findChild<QLineEdit>() //This is not working
lineEdits = form.findChild('QLineEdit) //This also not working
La solution
Les signatures de findChild
et findChildren
sont différentes dans PySide / PyQt4 car il n'y a pas d'équivalent réel à la syntaxe de conversion C ++ en Python.
Au lieu de cela, vous devez passer un type (ou tuple
de types) comme premier argument, et une chaîne facultative comme deuxième argument (pour faire correspondre le objectName
).
Votre exemple devrait donc ressembler à ceci:
lineEdits = form.findChildren(QtGui.QLineEdit)
Notez que findChild
et findChildren
sont des méthodes de QObject
- donc si votre formulaire ne les a pas, il ne peut pas être un QWidget
(car tous les widgets héritent du QObject
).
Autres conseils
Utilisez cette méthode QObject :: findChildren (onst QString & name= QString ()) sans paramètre.
L'omission de l'argument nom entraîne la mise en correspondance de tous les noms d'objets.
Voici un exemple de code C ++:
QList<QLineEdit*> line_edits = form.findChildren<QLineEdit*>();