我不明白为什么在使用Python和Qt 的快速GUI编程一书中,通过在主窗口上调用addActions()
将上下文菜单添加到中央窗口小部件< / em>(self
),如此(第180页):
self.addActions(self.imageLabel,
(editInvertAction, …))
其中self
是QMainWindow
,而imageLabel
是QLabel
设置为中央窗口小部件
# Added actions will be put in a context menu:
self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu)
self.setCentralWidget(self.imageLabel)
现在,为什么主窗口会以某种方式(通过self.addActions()
)与中央窗口小部件的上下文菜单相关联?仅仅直接在中央窗口小部件上调用addActions()
是不够的?实际上,以下内容确实创建了一个上下文菜单:
self.imageLabel.addActions((editInvertAction, …))
为什么本书不以这种方式举例说明上下文菜单?这不等同于更为复杂的self.addActions(…)
形式吗?
PS :我甚至看到documentation for QMainWindow.addActions()甚至没有提到任何第一个参数(self.imageLabel
,上面)!我完全迷失了为什么这本书使用上面的第一个片段而不是最后一个...帮助! :)
答案 0 :(得分:1)
在QMainWindow上使用self.addAction()允许所有QMainWindow子项(Docks,StatusBar,ToolBar,MenuBar,...)使用这些操作,而不仅仅是中央窗口小部件。
但获得细粒度上下文菜单控件的最佳方法是使用customContextMenuRequested信号(http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwidget.html#customContextMenuRequested)。