如何在 pyqt 中禁用 QTableView 的默认上下文菜单?
How to disable default context menu of QTableView in pyqt?
我正在尝试禁用 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)
使用显示我无法重现您的问题的代码,即便如此,解决方案是通过启用信号 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_())
我正在尝试禁用 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)
使用显示我无法重现您的问题的代码,即便如此,解决方案是通过启用信号 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_())