【发布时间】:2016-02-26 05:10:51
【问题描述】:
我有一个简单的 QTableWidget 设置如下:
self.table= QtGui.QTableWidget()
self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.table.viewport().installEventFilter(self)
self.table.verticalHeader().setResizeMode(2)
self.table.horizontalHeader().setResizeMode(2)
EventFilter 的反应是:
def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.MouseButtonRelease:
if event.button() == QtCore.Qt.LeftButton:
--- LMB action ---
if event.button() == QtCore.Qt.RightButton:
--- RMB action ---
return QtGui.QWidget.eventFilter(self, source, event)
该事件适用于鼠标左键单击:它同时检测单击和选择多个单元格。我希望能够用鼠标右键做同样的事情——现在它只能识别一个人民币点击,但我不能选择多个单元格。是我搞砸了还是错过了什么?
编辑 1:
我使用了 MarkyPython 建议的self.table.itemEntered.connect(handleItemPressed),现在我有了以下内容:
def eventFilter(self, source, event):
def handleItemPressed(item):
self.table.setItemSelected(item, 1)
if event.type() == QtCore.QEvent.MouseButtonPress:
if event.button() == QtCore.Qt.RightButton:
self.table.itemEntered.connect(handleItemPressed)
if event.type() == QtCore.QEvent.MouseButtonRelease:
if event.button() == QtCore.Qt.LeftButton:
--- LMB action ---
if event.button() == QtCore.Qt.RightButton:
--- RMB action ---
return QtGui.QWidget.eventFilter(self, source, event)
这在某种程度上是有效的。我现在可以同时使用鼠标右键和左键选择单元格,但是鼠标右键选择有点尴尬(正如您可以想象的那样,它只选择悬停在上方的项目/单元格,这与左侧的经典框选择不同鼠标按钮)。所以我的问题几乎解决了
【问题讨论】:
标签: python mouseevent qtablewidget