1
我想創造出列舉從我QMainWindow
所有QDockWidget
並允許顯示/隱藏QDockWidgets
動態菜單,到目前爲止,我得到這個代碼:如何使用QSignalMapper動態創建QActions?
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")
菜單中填充了所有QDockWidget windowTitles但當我按下他們中的每一個時,不調用插槽toggle_dock_widget
。 create_action
是創建QAction並將觸發信號連接到slot
的幫手。
問題是,我並不十分清楚QSignalMapper的工作原理,但我的直覺告訴我這是針對這個特定問題的正確選擇。
我在這裏可能會錯過什麼?
是的,謝謝指出。在問我的問題後,我發現了內建的問題。儘管如此,我還是非常想知道我的代碼片段有什麼問題,所以下次生病了解如何正確使用qsignalmapper時會更好。任何想法? +1 – BPL
@BPL。看到我更新的答案。 – ekhumoro
謝謝,就是這樣! – BPL