2016-02-25 34 views
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) 

方式,也有效。我现在可以选择带有鼠标右键和左键的单元格,但是右键选择有点尴尬(你可以想象,它只会选择悬停的项目/单元格,而不像左侧的经典框选择鼠标按钮)。所以我的探针几乎解决了

回答

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 
+0

我将* itemEntered *纳入我的代码中,请参阅我编辑的帖子。感谢您的建议 –

+0

您应该看看这个[site](http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidget.html)了解关于'QTableWidget'类的更多信息。它帮了我很多。 – MarkyPython

相关问题