2010-02-15 9 views
3

Je travaille sur une application PyQt. Actuellement, il existe un panneau d'état (défini comme QWidget) qui contient un QHBoxLayout. Cette mise en page est fréquemment mise à jour avec QPushButton s créé par une autre partie de l'application.Comment empêcher les boutons Qt d'apparaître dans un cadre séparé?

Chaque fois que les boutons qui apparaissent doivent être modifiés (ce qui est assez fréquent), un effet de mise à jour est appelé. Les boutons existants sont supprimés de la mise en page (en appelant layout.removeWidget(button) puis button.setParent(None)) et les nouveaux boutons sont ajoutés à la mise en page.

Généralement, cela fonctionne. Mais de temps en temps, lorsque j'appelle le button.setParent(None) sur le bouton pour le supprimer, il le fait sortir de l'application et commence à flotter dans son propre cadre autonome.

Comment puis-je supprimer un bouton de la mise en page et m'assurer qu'il ne commence pas à flotter?

Répondre

2

Vous devez appeler la méthode close() du bouton. Si vous voulez qu'il soit supprimé lorsque vous fermez, vous pouvez définir l'attribut Qt.WA_DeleteOnClose:

button.setAttribute(Qt.WA_DeleteOnClose) 
2

Essayez d'appeler QWidget::hide() sur le bouton avant de retirer de la mise en page si vous ne voulez pas supprimer votre bouton.