PyQT5 (四十四) 在 QTableWidget 表格中设置表格按列排序 的案例

在 QTableWidget 表格中设置表格按列排序 的案例
1.按那一列排序
2.排序类型:升序降序

import sys

from PyQt5 import QtPrintSupport, QtGui
from PyQt5.QtCore import Qt, QMimeData, QDate, QDateTime, QTime, QStringListModel
from PyQt5.QtGui import QIcon, QPainter, QBrush, QPixmap, QStandardItemModel, QStandardItem, QColor, QFont
from PyQt5.QtPrintSupport import QPageSetupDialog, QPrinter, QPrintDialog
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QFormLayout, QLabel, QLineEdit, QPushButton, QGridLayout, \
    QCalendarWidget, QVBoxLayout, QDateTimeEdit, QAction, QMainWindow, QTextEdit, QStatusBar, QFileDialog, QDialog, \
    QTableView, QMessageBox, QListView, QListWidget, QHBoxLayout, QTableWidget, QTableWidgetItem, QAbstractItemView

'''
在 QTableWidget 表格中设置表格按列排序 的案例
1.按那一列排序
2.排序类型:升序降序
sortItems(columnIndex,orderType)

'''

class ColumnSortDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 设置定位和左上角坐标
        self.setGeometry(300, 300, 460, 360)
        # 设置窗口标题
        self.setWindowTitle('QTableWidget扩展表格的按列排序 的演示')
        # 设置窗口图标
        # self.setWindowIcon(QIcon('../web.ico'))

        layout = QVBoxLayout()
        self.tablewidget = QTableWidget()
        self.tablewidget.setRowCount(4)
        self.tablewidget.setColumnCount(3)

        layout.addWidget(self.tablewidget)
        self.tablewidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

        newItem = QTableWidgetItem('玉皇大帝')
        newItem.setFont(QFont('微软雅黑',14,QFont.Black))
        self.tablewidget.setItem(0,0,newItem)

        newItem = QTableWidgetItem('男')
        newItem.setFont(QFont('宋体',14,QFont.Black))
        self.tablewidget.setItem(0,1,newItem)

        newItem = QTableWidgetItem('180')
        newItem.setFont(QFont('宋体',28,QFont.Black))
        newItem.setForeground(QBrush(QColor(0,120,255)))
        self.tablewidget.setItem(0,2,newItem)

        newItem = QTableWidgetItem('何仙姑')
        newItem.setFont(QFont('微软雅黑',14,QFont.Black))
        self.tablewidget.setItem(1,0,newItem)

        newItem = QTableWidgetItem('女')
        newItem.setFont(QFont('宋体',14,QFont.Black))
        self.tablewidget.setItem(1,1,newItem)

        newItem = QTableWidgetItem('160')
        newItem.setFont(QFont('宋体',28,QFont.Black))
        newItem.setForeground(QBrush(QColor(0,120,255)))
        self.tablewidget.setItem(1,2,newItem)

        newItem = QTableWidgetItem('太上老君')
        newItem.setFont(QFont('微软雅黑',14,QFont.Black))
        self.tablewidget.setItem(2,0,newItem)

        newItem = QTableWidgetItem('男')
        newItem.setFont(QFont('宋体',14,QFont.Black))
        self.tablewidget.setItem(2,1,newItem)

        newItem = QTableWidgetItem('170')
        newItem.setFont(QFont('宋体',28,QFont.Black))
        newItem.setForeground(QBrush(QColor(0,120,255)))
        self.tablewidget.setItem(2,2,newItem)

        newItem = QTableWidgetItem('如来佛祖')
        newItem.setFont(QFont('微软雅黑',14,QFont.Black))
        self.tablewidget.setItem(3,0,newItem)

        newItem = QTableWidgetItem('男')
        newItem.setFont(QFont('宋体',14,QFont.Black))
        self.tablewidget.setItem(3,1,newItem)

        newItem = QTableWidgetItem('190')
        newItem.setFont(QFont('宋体',28,QFont.Black))
        newItem.setForeground(QBrush(QColor(0,120,255)))
        self.tablewidget.setItem(3,2,newItem)

        self.button = QPushButton('排序')
        self.button.clicked.connect(self.order)
        layout.addWidget(self.button)

        self.orderType = Qt.DescendingOrder

        self.setLayout(layout)

    def order(self):
        if self.orderType == Qt.DescendingOrder:
            self.orderType = Qt.AscendingOrder
        else:
            self.orderType = Qt.DescendingOrder
        # 按照第三列排序,启动切换升序降序
        self.tablewidget.sortItems(2,self.orderType)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 设置应用图标
    app.setWindowIcon(QIcon('../web.ico'))
    w = ColumnSortDemo()
    w.show()
    sys.exit(app.exec_())

 

要按比例设置QTableWidget表格的列宽,可以使用setColumnWidth函数来设置每列的宽度。首先,你需要确定每列的宽度所占比例,然后根据表格的宽度来计算每列的实际宽度。 下面是一个示例代码,演示如何按比例设置QTableWidget表格的列宽: ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem import sys if __name__ == '__main__': app = QApplication(sys.argv) # 创建一个QTableWidget tableWidget = QTableWidget() # 设置表格的行数和列数 tableWidget.setRowCount(3) tableWidget.setColumnCount(4) # 设置表格的宽度 table_width = 500 # 列宽比例列表 column_ratios = [1, 2, 3, 4] # 计算每列的实际宽度 column_widths = [int(table_width * ratio / sum(column_ratios)) for ratio in column_ratios] # 设置每列的宽度 for i, width in enumerate(column_widths): tableWidget.setColumnWidth(i, width) # 添加表格内容 for row in range(tableWidget.rowCount()): for col in range(tableWidget.columnCount()): item = QTableWidgetItem(f'Row {row}, Col {col}') tableWidget.setItem(row, col, item) # 显示表格 tableWidget.show() sys.exit(app.exec_()) ``` 在上面的示例,我们创建了一个3行4列的QTableWidget,并设置表格的总宽度为500像素。然后,我们定义了一个包含4个元素的列宽比例列表,该列表表示每列的宽度所占比例。根据总宽度和比例,我们计算每列的实际宽度,并使用setColumnWidth函数设置每列的宽度。 最后,我们添加了一些示例的表格内容,并显示了QTableWidget。 请根据你的实际需求修改示例代码表格行数、列数、列宽比例和表格内容。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值