Reputation: 19369
The code below creates a single QTreeWidget
.
Clicking any item adds it to the current selection (QTreeWidget is set to support MultiSelection
). But I would like to only add to the current selection when Shift or Command modifier key is used.
app = QApplication([])
widget = QTreeWidget()
widget.setSelectionMode(QAbstractItemView.MultiSelection)
widget.setColumnCount(5)
for row in range(7):
item = QTreeWidgetItem(widget)
for col in range(5):
item.setText(col, 'Column %s' % col)
widget.show()
qApp.exec_()
Upvotes: 0
Views: 3352
Reputation: 31
Only change Multiselection by ExtendedSelection. Would be:
widget.setSelectionMode(QAbstractItemView.ExtendedSelection)
Documentation qt5 (version 5.13) https://doc.qt.io/qt-5/qabstractitemview.html#SelectionMode-enum
Upvotes: 1
Reputation: 244282
The mouseMoveEvent
and mousePressEvent
methods must be overwritten and in it decide if any action is taken or not.
class TreeWidget(QTreeWidget):
def mouseMoveEvent(self, event):
if QApplication.keyboardModifiers()&(Qt.ShiftModifier|Qt.ControlModifier):
QTreeWidget.mouseMoveEvent(self, event)
def mousePressEvent(self, event):
if QApplication.keyboardModifiers()&(Qt.ShiftModifier|Qt.ControlModifier):
QTreeWidget.mousePressEvent(self, event)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
widget = TreeWidget()
widget.setSelectionMode(QAbstractItemView.MultiSelection)
widget.setColumnCount(5)
for row in range(7):
item = QTreeWidgetItem(widget)
for col in range(5):
item.setText(col, 'Column %s' % col)
widget.show()
sys.exit(app.exec_())
Upvotes: 2