ZBLOG

QTableview 按某列名称排序

要在QTableView中按某列名称进行排序,可以使用QSortFilterProxyModel。以下是一个示例代码,展示如何实现按照某一列的名称对数据进行排序:

from PyQt5.QtCore import Qt, QSortFilterProxyModel
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
from PyQt5.QtGui import QStandardItemModel

app = QApplication([])
window = QMainWindow()

# 创建数据模型
model = QStandardItemModel(4, 3)
model.setHorizontalHeaderLabels(['Name', 'Age', 'Gender'])
model.setData(model.index(0, 0), 'John')
model.setData(model.index(1, 0), 'Alice')
model.setData(model.index(2, 0), 'Bob')
model.setData(model.index(3, 0), 'Charlie')
model.setData(model.index(0, 1), 25)
model.setData(model.index(1, 1), 30)
model.setData(model.index(2, 1), 20)
model.setData(model.index(3, 1), 35)
model.setData(model.index(0, 2), 'Male')
model.setData(model.index(1, 2), 'Female')
model.setData(model.index(2, 2), 'Male')
model.setData(model.index(3, 2), 'Male')

# 创建QTableView和代理模型
table_view = QTableView()
proxy_model = QSortFilterProxyModel()
proxy_model.setSourceModel(model)

# 设置代理模型为QTableView的模型
table_view.setModel(proxy_model)

# 将某一列设置为可排序
proxy_model.setSortRole(Qt.EditRole)
table_view.setSortingEnabled(True)

# 按某一列名称排序(例如按照Name列)
sort_column_index = model.horizontalHeaderItem(0).column()
table_view.sortByColumn(sort_column_index, Qt.AscendingOrder)

# 显示窗口
window.setCentralWidget(table_view)
window.show()

app.exec_()

在这个示例中,我们使用QStandardItemModel创建了一个4行3列的数据模型,并设置了每一格的值。然后,我们创建了一个QSortFilterProxyModel作为QTableView的代理模型,并将其设置为QTableView的模型。通过调用setSortRole()方法,我们可以设置代理模型中可排序的角色,这里我们选择了Qt.EditRole。最后,通过sortByColumn()方法指定按某一列名称进行排序。

你可以根据自己的实际需求修改示例代码中的数据和排序方式来适应你的应用场景。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9037

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?