J'aimerais créer un menu dynamique qui énumère tous QDockWidget
de mon QMainWindow
et permet de montrer/cacher la QDockWidgets
, jusqu'à présent, je suis arrivé ce code:Comment utiliser QSignalMapper avec QActions créé dynamiquement?
class PluginActionsViewDocks():
def __init__(self, main_window):
self.main_window = main_window
mapper = QSignalMapper(self.main_window)
self.actions = []
for dock in main_window.findChildren(QtWidgets.QDockWidget):
action = create_action(
main_window, dock.windowTitle(),
slot=mapper.map,
tooltip='Show {0} dock'.format(dock.windowTitle())
)
mapper.setMapping(action, dock)
self.actions.append(action)
mapper.mapped.connect(self.toggle_dock_widget)
help_menu = main_window.menuBar().addMenu('&View')
setattr(help_menu, "no_toolbar_policy", True)
add_actions(help_menu, tuple(self.actions))
def toggle_dock_widget(self, dock_widget):
print("toggle_dock_widget")
Le menu est rempli avec tous QDockWidget mais windowTitles quand je presse chacun d'entre eux, le slot toggle_dock_widget
n'est pas appelé. create_action
est un assistant qui crée le QAction et connecte le signal déclenché à slot
. Le fait est que je ne comprends pas très bien comment fonctionne QSignalMapper mais mon intuition me dit que c'est le bon choix pour ce problème particulier.
Que pourrais-je manquer ici?
Oui, merci de le signaler. Après avoir posé ma question, j'avais découvert que celui-ci était intégré. Pourtant, je suis assez intéressé à comprendre ce qui ne va pas avec mon extrait de sorte que la prochaine fois je sais beaucoup mieux comment utiliser correctement qsignalmapper. Une idée? +1 – BPL
@BPL. Voir ma réponse mise à jour. – ekhumoro
Merci, c'était tout! – BPL