Obtenir une mise en page de widgets en PyQT
J'ai un QVBoxLayout
que j'ai ajouté un peu de widgets, par l'intermédiaire de addWidget()
. Je dois maintenant supprimer les widgets, et il semble que j'ai besoin d'utiliser removeWidget()
(qui prend la forme d'un widget être retiré) pour le faire.
J'ai pensé que le fait d'appeler children()
ou findChildren(QWidget)
sur ma mise en page doit retourner une liste des widgets, j'ai ajouté à cela, je suis dans le débogueur, cependant, et je suis juste de recevoir vide listes.
Je suis terriblement malentendu quelque chose? J'ai juste commencé à faire PyQT cette dernière semaine et ont été pour la plupart de l'apprentissage par essais et erreurs avec l'API docs.
OriginalL'auteur Xiong Chiamiov | 2010-06-19
Vous devez vous connecter pour publier un commentaire.
C'est étrange. Ma compréhension est que l'ajout de widgets via
addWidget
transfère la propriété de la mise en page afin d'appelerchildren()
devrait marcher.Cependant, comme alternative, vous pouvez en boucle sur les éléments de mise en page en utilisant
count()
etitemAt(int)
de fournir unQLayoutItem
àremoveItem(QLayoutItem*)
.Edit:
J'ai juste essayé
addWidget
avec une droite C++ application de test. et il n'a pas de transfert deQObject
la propriété de la mise en page afinchildren()
est en effet une liste vide. Le docs clairement dire que la propriété est transférée si...Edit 2:
Bon, il semble qu'il en transfère la propriété à l'widget qui a cette mise en page (ce qui est pas ce que les docs dit). Qui rend les éléments de la structure des frères et sœurs de la mise en page elle-même dans le
QObject
hiérarchie! Il est donc plus facile de coller aveccount
etitemAt
.Oh, si
itemAt
donne un QWidgetItem (ce qui nécessite l'utilisation deremoveItem
, qui, pour quelque raison que ce soit ne faisais pas ce que je voulais). Si vous appelez.widget()
sur elle, cependant, vous aurez (le choc!) le QWidget associé, qui peut être enlevé avecremoveWidget
et avoir un parent deNone
.OriginalL'auteur Troubadour
Pour obtenir un widget à partir d'un QLayout, vous devez appeler son
itemAt(index)
méthode.Comme le nom de cette méthode implique, il sera de retour d'un élément au lieu d'un widget. L'appel de
widget()
sur le résultat va enfin vous donner le widget:Pour supprimer un widget, définir le widget parent à
None
:Aussi vraiment utile est la QLayout
count()
méthode. Pour trouver et supprimer tout le contenu d'une mise en page:OriginalL'auteur Arnoud Vangrunderbeek