QTableWidget排序
有的时候想实现点击QTableWidget的表头就能实现排序的效果,一直没有找到合适的资料,前两天无意间发现这个功能了,以下是实现代码
Python
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class ColumnSort(QWidget):
def __init__(self):
super(ColumnSort, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('按列排序')
self.resize(430, 230)
layout = QVBoxLayout()
self.tableWidget = QTableWidget()
self.tableWidget.setSortingEnabled(True)
# 这里是核心功能,将这里设置成True,这样运行的时候就可以点击表头排序了
self.tableWidget.setRowCount(4)
self.tableWidget.setColumnCount(3)
layout.addWidget(self.tableWidget)
self.tableWidget.setHorizontalHeaderLabels(['姓名', '性别', '体重(kg)'])
newItem = QTableWidgetItem('张三')
self.tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem('男')
self.tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem('165')
self.tableWidget.setItem(0, 2, newItem)
newItem = QTableWidgetItem('李四')
self.tableWidget.setItem(1, 0, newItem)
newItem = QTableWidgetItem('女')
self.tableWidget.setItem(1, 1, newItem)
newItem = QTableWidgetItem('160')
self.tableWidget.setItem(1, 2, newItem)
newItem = QTableWidgetItem('王五')
self.tableWidget.setItem(2, 0, newItem)
newItem = QTableWidgetItem('男')
self.tableWidget.setItem(2, 1, newItem)
newItem = QTableWidgetItem('170')
self.tableWidget.setItem(2, 2, newItem)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = ColumnSort()
main.show()
sys.exit(app.exec())
运行截图:
注意事项
有的时候使用排序功能,容易出现单元格数据丢失的情况,以后使用的时候需要注意,目前测试如果将列表中的数据写入到QTableWidget,且保留排序的功能,可以采取先临时禁用,修改数据之后再启用
另外,如果数据是从列表导入到QTableWidget中,如果列表的内容发生改变,需要重新刷新QTableWidget数据,建议直接修改指定位置的的数据,而不是通过遍历刷新,一旦数据量比较大,会影响到性能
