pyqt5 tableview如何设置鼠标只能单选一行,CTRL和shift键可以多选
时间: 2023-05-29 17:06:40 浏览: 645
可以通过设置QAbstractItemView的selectionMode属性来实现。
以下是一个示例代码:
```python
from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem
class MyTableView(QTableView):
def __init__(self, parent=None):
super().__init__(parent)
# 设置选择模式为行选择
self.setSelectionMode(QTableView.SingleSelection)
self.setSelectionBehavior(QTableView.SelectRows)
# 设置只能单选行
self.setEditTriggers(QTableView.NoEditTriggers)
self.setDragEnabled(False)
self.setDragDropMode(QTableView.NoDragDrop)
self.setShowGrid(False)
self.verticalHeader().setVisible(False)
self.horizontalHeader().setStretchLastSection(True)
def mousePressEvent(self, event):
# 如果按下CTRL或SHIFT键,则可以多选
if event.buttons() & (Qt.ControlModifier | Qt.ShiftModifier):
super().mousePressEvent(event)
else:
# 否则只能选中单行
index = self.indexAt(event.pos())
if index.isValid():
self.selectionModel().clearSelection()
self.selectionModel().select(index, QTableView.Select)
else:
super().mousePressEvent(event)
if __name__ == '__main__':
app = QApplication([])
table_view = MyTableView()
model = QStandardItemModel(5, 3)
for i in range(5):
for j in range(3):
item = QStandardItem('item({}, {})'.format(i, j))
model.setItem(i, j, item)
table_view.setModel(model)
table_view.show()
app.exec_()
```
在上面的代码中,我们自定义了一个MyTableView类继承自QTableView,并重写了mousePressEvent方法。在这个方法中,我们检查鼠标是否按下了CTRL或SHIFT键,如果是,则调用父类的mousePressEvent方法,否则只选中单行。
阅读全文