11
votes

Comment remplacer un widget avec un autre en utilisant QT?

J'ai un qhboxlayout code> avec un qtreewidget code> à gauche, un séparateur sur le milieu et un widget à droite.

quand je clique sur le Qtreewidget code>, je veux modifier le widget sur la droite pour modifier le qtreewidgetem code> p>

J'ai essayé de le faire avec ce code: p>

def new_rendez_vous(self):
    self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget)
    del self.ui.editionFormWidget
    self.ui.editionFormWidget = RendezVousManagerDialog(self.parent)
    self.ui.editionFormWidget.show()
    self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget)
    self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData)

def edit(self, category, rendez_vous):
    self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget)
    del self.ui.editionFormWidget
    self.ui.editionFormWidget = RendezVousManagerDialog(self.parent, category, rendez_vous)
    self.ui.editionFormWidget.show()
    self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget)
    self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData)

def edit_category(self, category):
    self.ui.horizontalLayout_4.removeWidget(self.ui.editionFormWidget)
    del self.ui.editionFormWidget
    self.ui.editionFormWidget = CategoryManagerDialog(self.parent, category)
    self.ui.editionFormWidget.show()
    self.ui.horizontalLayout_4.addWidget(self.ui.editionFormWidget)
    self.connect(self.ui.editionFormWidget, QtCore.SIGNAL('saved'), self.scheduleTreeWidget.updateData)


0 commentaires

3 Réponses :



22
votes

J'ai la même question que Natiime.

Le Qstackedwidget est une solution pour une mise en page préréglée. Il agit comme la chose flippeuse dans un vieux dîner pour une boîte à musique. (X-quantité d'albums dans la Jukebox, retourner dans les albums installés).

Cependant, cela ne résout pas la question.

Par exemple, j'ai un code je suis prototypage avec une mise en page d'interface utilisateur, mais je souhaite remplacer certains des widgets qui agissent en tant que porte-locaux avec les widgets appropriés codés lors de l'exécution du script principal, ou est créé de manière dynamique.

Je suis sûr qu'il existe une procédure simple ou une mise en garde de manière à supprimer / remplacer correctement un widget.

Le code que j'ai a un widget TextEdit de base dans un disposition de la grille. Je souhaite coder une version personnalisée de ce widget pour glisser-déposer, puis échangez-le avec le texte par défaut.

Comme Natiman, le code semble logiquement sonner, mais les widgets sont emballés de manière logique dans le La mise en page comme dumping un sac à main.

J'espère pouvoir comprendre l'astuce à cela et republier la mise en garde.

solution:

voilà !! Trouvé quelque chose qui fait certainement l'affaire. Fermez votre widget xxx

J'ai supprimé le widget de la mise en page, puis fermé le widget. À ce stade, la variable que j'utilise est ouverte pour créer mon widget personnalisé / modifié, puis la réinserner dans la mise en page

Oui, une autre élégance est nécessaire pour traiter des mises en page plus compliquées, mais la base Besoin de détruire un widget afin de remplacer est dans la méthode .Close ()

acclamations .. J'espère que cela aide. B


1 commentaires

Merci beaucoup mate enfin une solution qui fonctionne réellement



10
votes

En réalité, comme pour Qt5 fort> au moins, il existe une alternative plus compacte à la solution de B4ADLE7 utilisant Qlayout's REMPLACEMENTWIDGET :

containing_layout = placeholder.parent().layout()
containing_layout.replaceWidget(placeholder, new_widget)


1 commentaires

Oui! Travaillé pour moi! Rapide et simple comme cela pourrait être!