【发布时间】:2018-12-08 01:44:10
【问题描述】:
我正在与QTableView 合作。我能够根据各个列标题以升序和降序对数据进行排序。一旦我按列标题对数据进行排序,我想再次根据原始索引对其进行排序。我尝试关注this question,但无法修复它。
代码:
import numpy as np
from qtpy import QtCore, QtGui, QtWidgets
from qtpy.QtCore import Qt, QAbstractTableModel
from qtpy.QtWidgets import QApplication, QTableView
data = np.random.random((10, 3))
app = QApplication([''])
class SimpleModel(QAbstractTableModel):
headers = 'Col 1', 'Col 2', 'Col 3'
def __init__(self, *args, **kwargs):
super(SimpleModel, self).__init__(*args, **kwargs)
table.setSortingEnabled(True)
self.order = np.arange(data.shape[0])
self.layoutChanged.emit()
def rowCount(self, index=None):
return 10
def columnCount(self, index=None):
return 3
def data(self, index, role):
if role == Qt.DisplayRole:
col = index.column()
row = index.row()
return str(data[self.order[row], col])
def sort(self, column, ascending):
self.order = np.argsort(data[:, column])
if ascending == Qt.DescendingOrder:
self.order = self.order[::-1]
self.layoutChanged.emit()
def headerData(self, section, orientation, role):
if role == QtCore.Qt.DisplayRole :
if orientation == QtCore.Qt.Horizontal :
return self.headers[section]
elif orientation == QtCore.Qt.Vertical :
return section
return None
table = QTableView()
table.setModel(SimpleModel())
table.show()
app.exec_()
截图:
谢谢。
【问题讨论】:
-
table_viewer和LayerArtist是什么?请提供minimal reproducible example -
@eyllanesc 我已更新代码以提供 MCVE。谢谢!
标签: python pyqt pyqt5 qtableview qtablewidget