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

События отлично работает для левой кнопки мыши нажмите : он обнаруживает как один клик, так и выбор нескольких ячеек. Я хотел бы иметь возможность сделать то же самое с правой кнопкой мыши - прямо сейчас он распознает только RMB-клик, но я не могу выбрать несколько ячеек. Я что-то испортил, или я что-то упустил?

EDIT 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

. Вы должны проверить этот [сайт] (http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidget.html) за дополнительной информацией о классе 'QTableWidget'. Это очень помогло мне. – MarkyPython