gpt4 book ai didi

python - 如何使用 QSignalMapper 和动态创建的 QActions ?

转载 作者:行者123 更新时间:2023-12-01 03:28:57 24 4
gpt4 key购买 nike

我想创建一个动态菜单,它枚举 QMainWindow 中的所有 QDockWidget 并允许显示/隐藏 QDockWidgets,因此到目前为止我得到了这个代码:

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_widgetcreate_action 是一个帮助器,它创建 QAction 并将触发的信号连接到 slot

问题是,我不太了解 QSignalMapper 的工作原理,但我的直觉告诉我这是解决这个特定问题的正确选择。

我在这里可能缺少什么?

最佳答案

已经有一个内置的停靠小部件菜单。只需右键单击任何停靠栏标题栏、任何工具栏或菜单栏。请参阅:QMainWindow::createPopupMenu .

附注:

您的QSignalMapper代码不起作用的原因可能是因为您连接到mapped信号的错误重载。试试这个:

    mapper.mapped[QtWidgets.QWidget].connect(self.toggle_dock_widget)

关于python - 如何使用 QSignalMapper 和动态创建的 QActions ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41155609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com