我有一个简单的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)
哪种方式有效。我现在能够用鼠标左键和左键选择单元格,但是鼠标右键选择有点笨拙(你可以想象,它只选择悬停在上面的项目/单元格,不像左边的经典方框选择鼠标按钮)。所以我的探索几乎已经解决了
答案 0 :(得分:1)
我在我正在制作的一个程序中有类似的东西。当您按住鼠标选择多个单元格时可以使用itemEntered
,并且可以使用itemPressed
选择鼠标左键单击。第三行的注释显示了如果要逐个单元格而不是选择选择可以添加的内容。只要问它是否有效。
self.table= QtGui.QTableWidget()
self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
# self.table.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
self.table.verticalHeader().setResizeMode(2)
self.table.horizontalHeader().setResizeMode(2)
self.table.itemEntered.connect(self.handleItemHovered) # handleItemHoverd is a function you create to do something when you select multiple cells
self.table.itemPressed.connect(self.handleItemPressed) # handleItemPressed is a function you create to determine what to do when you click on the item