2016-02-25 65 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

相關問題