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
Était-ce utile?

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*>();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top