Python PyQt和上下文菜单

Python PyQt和上下文菜单,python,qt,pyqt,menu,Python,Qt,Pyqt,Menu,我需要创建一个右键点击我的窗口上下文菜单。但我真的不知道如何做到这一点 是否有任何小部件用于此,或者我必须从一开始就创建它 编程语言:Python 图形库:qt(pyqt)我不能用Python说话,但是C++中相当简单。 创建小部件后,首先设置策略: w->setContextMenuPolicy(Qt::CustomContextMenu); 然后将关联菜单事件连接到插槽: connect(w, SIGNAL(customContextMenuRequested(const QPoin

我需要创建一个右键点击我的窗口上下文菜单。但我真的不知道如何做到这一点

是否有任何小部件用于此,或者我必须从一开始就创建它

编程语言:Python

图形库:qt(pyqt)

我不能用Python说话,但是C++中相当简单。 创建小部件后,首先设置策略:

w->setContextMenuPolicy(Qt::CustomContextMenu);
然后将关联菜单事件连接到插槽:

connect(w, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ctxMenu(const QPoint &)));
最后,实现插槽:

void A::ctxMenu(const QPoint &pos) {
    QMenu *menu = new QMenu;
    menu->addAction(tr("Test Item"), this, SLOT(test_slot()));
    menu->exec(w->mapToGlobal(pos));
}

这就是C++中如何做到的,Python API不应该太不同。 编辑:在谷歌上浏览之后,下面是我的python示例的设置部分:

self.w = QWhatever();
self.w.setContextMenuPolicy(Qt.CustomContextMenu)
self.connect(self.w,SIGNAL('customContextMenuRequested(QPoint)'), self.ctxMenu)

另一个示例演示了如何在工具栏和关联菜单中使用操作

class Foo( QtGui.QWidget ):

    def __init__(self):
        QtGui.QWidget.__init__(self, None)
        mainLayout = QtGui.QVBoxLayout()
        self.setLayout(mainLayout)

        # Toolbar
        toolbar = QtGui.QToolBar()
        mainLayout.addWidget(toolbar)

        # Action are added/created using the toolbar.addAction
        # which creates a QAction, and returns a pointer..
        # .. instead of myAct = new QAction().. toolbar.AddAction(myAct)
        # see also menu.addAction and others
        self.actionAdd = toolbar.addAction("New", self.on_action_add)
        self.actionEdit = toolbar.addAction("Edit", self.on_action_edit)
        self.actionDelete = toolbar.addAction("Delete", self.on_action_delete)
        self.actionDelete.setDisabled(True)

        # Tree
        self.tree = QtGui.QTreeView()
        mainLayout.addWidget(self.tree)
        self.tree.setContextMenuPolicy( Qt.CustomContextMenu )
        self.connect(self.tree, QtCore.SIGNAL('customContextMenuRequested(const QPoint&)'), self.on_context_menu)

        # Popup Menu is not visible, but we add actions from above
        self.popMenu = QtGui.QMenu( self )
        self.popMenu.addAction( self.actionEdit )
        self.popMenu.addAction( self.actionDelete )
        self.popMenu.addSeparator()
        self.popMenu.addAction( self.actionAdd )

    def on_context_menu(self, point):

         self.popMenu.exec_( self.tree.mapToGlobal(point) )

请注意,在PyQt4中,包中的CustomContextMenu位置如下:PyQt4.QtCore.Qt.CustomContextMenuGotta喜欢两年后的随机向下投票和19次向上投票:-p向下投票是偶然的,我真的很抱歉。这个答案实际上帮了我很大的忙。@Utkarshssinha看,它应该对下行票起作用,就像对上行票起作用一样。tl;dr:再次点击箭头。感谢@PedromOrganger的帮助-我在网上找到了一些使用“\u信号(“customContextMenuRequest…””的代码,我想知道为什么它不起作用
:)
-感谢这篇文章,我现在知道它被称为
customContextMenuRequested
,带有“ed”“最后。。。干杯我知道这是一个老帖子,但PedroMorgan给出的例子对我来说并不适用。我在谷歌上做了很多搜索,这是我得到的最近的一次。当我右键单击列表时,我得到的只是一个小框,当我右键单击时,它的大小为一个像素。有人能给我举一个在PyQt中使用上下文菜单的最新例子吗?这个例子和Pedro的例子一样简单。很久以前,我都不记得br我从哪里得到了工作代码,但我最终还是让我的代码工作了。谢谢