问:向中央窗口小部件添加上下文菜单的最佳方法是什么?

时间:2010-08-27 08:43:34

标签: python qt pyqt qwidget qmainwindow

我不明白为什么在使用Python和Qt 的快速GUI编程一书中,通过在主窗口上调用addActions() 将上下文菜单添加到中央窗口小部件< / em>(self),如此(第180页):

self.addActions(self.imageLabel,
                (editInvertAction, …))

其中selfQMainWindow,而imageLabelQLabel设置为中央窗口小部件

# 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,上面)!我完全迷失了为什么这本书使用上面的第一个片段而不是最后一个...帮助! :)

1 个答案:

答案 0 :(得分:1)

在QMainWindow上使用self.addAction()允许所有QMainWindow子项(Docks,StatusBar,ToolBar,MenuBar,...)使用这些操作,而不仅仅是中央窗口小部件。

但获得细粒度上下文菜单控件的最佳方法是使用customContextMenuRequested信号(http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwidget.html#customContextMenuRequested)。