0
我有一个简单QTableWidget的设置,像这样: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: 我用self.table.itemEntered.connect(handleItemPressed)
通过MarkyPython建议,现在我有以下几点:
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)
方式,也有效。我现在可以选择带有鼠标右键和左键的单元格,但是右键选择有点尴尬(你可以想象,它只会选择悬停的项目/单元格,而不像左侧的经典框选择鼠标按钮)。所以我的探针几乎解决了
我将* itemEntered *纳入我的代码中,请参阅我编辑的帖子。感谢您的建议 –
您应该看看这个[site](http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidget.html)了解关于'QTableWidget'类的更多信息。它帮了我很多。 – MarkyPython