【问题标题】:How to disable default context menu of QTableView in pyqt?如何在pyqt中禁用QTableView的默认上下文菜单?
【发布时间】:2019-01-24 16:08:20
【问题描述】:

我正在尝试在 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)

【问题讨论】:

    标签: python python-2.7 pyqt pyqt4


    【解决方案1】:

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

    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_())
    

    【讨论】:

    • 感谢您的回复.....我尝试了上面的代码,但我的自定义上下文菜单消失了,默认菜单仍然存在。
    • @String39 您是否尝试过我的代码,或者您是否已将其改编为您的代码?
    • 我试过你的代码,但默认菜单仍然存在。我的自定义上下文菜单也消失了。
    • @String39 你有什么版本的 PyQt4?
    • 我已经安装了 PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32。
    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2019-11-21
    相关资源
    最近更新 更多