如何在pyqt中禁用QTableView的默认上下文菜单?

时间:2018-08-17 15:15:01

标签: python python-2.7 pyqt pyqt4

我正在尝试 pyqt 禁用默认的QTableView上下文菜单。

我已经重新实现了contextMenuEvent,但是第一次单击右键就可以使用。当我第二次单击同一项目时,默认上下文菜单重新出现。 (下面的图片供参考。)

我尝试了“ QTableView.setContextMenuPolicy( Qt.NoContextMenu ”,但这没有用。还提到了类似类型问题的答案,但问题仍未解决。

有什么主意吗?

例如在QTableView中显示重新实现的上下文菜单。

def contextMenuEvent(self, event):
    menu = QMenu(self)

    CutAction = QAction(self.view)
    CutAction.setText("&Cut")
    menu.addAction(CutAction)
    CutAction.setIcon(QIcon(":/{0}.png".format("Cut")))
    CutAction.setShortcut("Ctrl+X")
    self.connect(CutAction, SIGNAL("triggered()"), self.cut)

enter image description here

1 个答案:

答案 0 :(得分:1)

使用显示我无法重现您的问题的代码,即使解决方案是通过启用信号Qt::CustomContextMenu使用customContextMenuRequested,并且必须在相应的插槽中实现逻辑: / p>

from PyQt4.QtCore import *
from PyQt4.QtGui import *


class TableView(QTableView):
    def __init__(self, *args, **kwargs):
        super(TableView, self).__init__(*args, **kwargs)
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.onCustomContextMenuRequested)

    def onCustomContextMenuRequested(self, pos):
        menu = QMenu()
        CutAction = menu.addAction("&Cut")
        menu.addAction(CutAction)
        CutAction.setIcon(QIcon(":/{0}.png".format("Cut")))
        CutAction.setShortcut("Ctrl+X")
        CutAction.triggered.connect(self.cut)
        menu.exec_(self.mapToGlobal(pos))

    def cut(self):
        pass


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = TableView()
    model = QStandardItemModel(10, 10, w)
    w.setModel(model)
    w.show()
    sys.exit(app.exec_())
相关问题