📅  最后修改于: 2023-12-03 15:18:46.339000             🧑  作者: Mango
在PyQt中,QTableView可以实现表格的显示和编辑。当用户选定了某行之后,我们需要获取这行的数据以便进一步操作。本文将介绍如何通过PyQt QTableView获取选定的行数据。
在继承QTableView的类中实现mousePressEvent函数,并在该函数中使用QModelIndex和QVariant获取选中行的数据。
class MyTable(QTableView):
def __init__(self):
super().__init__()
def mousePressEvent(self, event):
item = self.currentItem()
print(item.text())
selectedIndexes()方法返回一个QModelIndex对象列表,其中包含选中单元格的行和列信息。
def mousePressEvent(self, event):
indexes = self.selectedIndexes()
print(indexes)
使用QModelIndex对象中的data()方法获取对应单元格的数据。
def mousePressEvent(self, event):
indexes = self.selectedIndexes()
for index in indexes:
print(index.row())
print(index.column())
print(index.data())
通过QModelIndex对象的parent()方法获取选中行的父节点,即一个QModelIndex对象,然后使用该对象的child()方法获取每个单元格的数据。
def mousePressEvent(self, event):
indexes = self.selectedIndexes()
row = indexes[0].row()
model = self.model()
data = []
for column in range(model.columnCount()):
index = model.index(row, column)
data.append(index.data())
print(data)
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class MyModel(QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def rowCount(self, parent):
return len(self._data)
def columnCount(self, parent):
return len(self._data[0])
def data(self, index, role):
if role == Qt.DisplayRole:
row = index.row()
column = index.column()
value = self._data[row][column]
return value
return QVariant()
class MyTable(QTableView):
def __init__(self):
super().__init__()
def mousePressEvent(self, event):
row = self.currentIndex().row()
model = self.model()
data = []
for column in range(model.columnCount()):
index = model.index(row, column)
data.append(index.data())
print(data)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
data = [[1, 'a', 'male'], [2, 'b', 'female'], [3, 'c', 'male']]
model = MyModel(data)
table = MyTable()
table.setModel(model)
table.show()
sys.exit(app.exec_())