У меня есть QTableWidget с 8 столбцами, и я хочу, чтобы контекстное меню открывалось только в первом (столбец 0), поскольку в остальных столбцах я использую правый щелчок для другого действия.
Когда я впервые запускаю программу, все работает как надо: если я сначала щелкну правой кнопкой мыши в ячейке столбца 3, например, она сделает то, что должна (вычесть 1 из значения ячейки), и не откроет контекстное меню,perfect.
НО после того, как я сначала щелкну правой кнопкой мыши по столбцу 0, чтобы открыть контекстное меню (оно работает нормально), если я вернусь к столбцу 3 и щелкну правой кнопкой мыши ... Откроется контекстное меню!И он также выполняет действия, которые он должен (вычитая из значения ячейки)!
Вот код, который я использую:
class Table(QtWidgets.QTableWidget):
cellExited = QtCore.pyqtSignal(int, int)
itemExited = QtCore.pyqtSignal(QtWidgets.QTableWidgetItem)
def __init__(self,*args,**kwargs):
QtWidgets.QTableWidget.__init__(self,*args,**kwargs)
self.setItemDelegate(ReadOnlyDelegate(self))
self._last_index = QtCore.QPersistentModelIndex()
self.viewport().installEventFilter(self)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.popMenu = QtWidgets.QMenu(self)
self.popMenu.addAction(QtWidgets.QAction('Action 1', self))
self.popMenu.addAction(QtWidgets.QAction('Action 2', self))
self.popMenu.addAction(QtWidgets.QAction('Action 3', self))
def mousePressEvent(self,event):
it = self.itemAt(event.pos())
print(it.column()) #DEBUG
if it.column()>0:
if event.button() == QtCore.Qt.LeftButton:
it.setText(str(round(float(it.text()) + 1,2)))
elif event.button() == QtCore.Qt.RightButton:
it.setText(str(round(float(it.text()) - 1,2)))
elif it.column() == 0 and event.button() == QtCore.Qt.RightButton:
print(it.column() == 0) #DEBUG
print(event.button() == QtCore.Qt.RightButton) #DEBUG
self.customContextMenuRequested.connect(self.on_context_menu)
def on_context_menu(self, point):
self.popMenu.exec_(self.viewport().mapToGlobal(point))