pyqt Designer 中 tableWidget QTableWidget 表格用法

qtableWidge中的行和列是从0开始的
***************
self.tableWidget.itemClicked.connect(self.outSelect)#单击获取单元格中的内容
    def outSelect(self, Item=None):
        if Item==None:
            return        
        print(Item.text())
***************
self.tableWidget.setRowCount(row_num)#设置表格的行数
self.tableWidget.setColumnCount(col_num)#设置表格的列数
***************
self.tableWidget.columnCount()#获取当前表格共有多少列
self.tableWidget.rowCount()#获取当前表格共有多少行
***************
self.tableWidget.currentColumn()#获取当前选中的列
self.tableWidget.currentRow()#获取当前选中的行
***************
self.tableWidget.removeColumn(col)#删除指定列
self.tableWidget.removeRow(col)#删除指定行
***************
self.tableWidget.verticalHeader().setVisible(False)#隐藏列表头
self.tableWidget.horizontalHeader().setVisible(False)#隐藏行表头
***************
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectColumns)#设置为选择整列
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)#设置选择整行
***************
item_data = QTableWidgetItem(None)
self.tableWidget.setItem(row,col,item_data)#设置item信息
***************
self.tableWidget.item(d_row,d_col).text()#获取某行某列item中的x信息
***************
self.tableWidget.clearContents()#清空tablewidger中的内容,不包括表头
self.tableWidget.clear()#清楚所有包括表头
***************
col_num = self.tableWidget.columnCount()#获取当前的列数
row_num = self.tableWidget.rowCount()#获取当前的列数
self.tableWidget.setRowCount(row_num + 1)#添加一行
self.tableWidget.setColumnCount(col_num + 1)#添加一列
***************
if self.tableWidget.item(d_row,d_col) == None#判断指针是否为None(当新增加一行时,如果没有设置item信息,需要首先判断item是否为空)
***************
data_it =QTableWidgetItem(#()里面为表格中的元素
data_it.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)#设置为item不可被编辑

		# 展示到图形界面   一个值设置一个 item_number 
        packet_number = packet_deal[0:13]
        item_number = QTableWidgetItem(packet_number)
        self.ui.tableWidget.setItem(index, 1, item_number)  # 设置item信息

        packet_number = packet_deal[8:11]
        print(" 数据:", packet_number)
        item_number = QTableWidgetItem(packet_number)
        self.ui.tableWidget.setItem(index, 0, item_number)

禁止表格中的数据移动

    self.table_widget.setDragEnabled(False)  # 禁止拖动项
    self.table_widget.setDragDropMode(QTableWidget.NoDragDrop)  # 禁止整体拖放

设置行、列的间隔

在这里插入图片描述

去掉行或列索引

在这里插入图片描述

设置标题之间的间隔

在这里插入图片描述

复选框

# 用来装行表头所有复选框 全局变量
all_header_combobox = []

    def setTableWidget(self):
        # 清空复选框列表
        all_header_combobox.clear()

        for i in range(0, len(packet_count_list)):
            # for packet_index, packet in enumerate(packets):
            # count = packet_index + 1
            print('packet_count_list', packet_count_list[i])
            # count = len(packet_count_list)
            count = i + 1
            self.ui.tableWidget.setRowCount(count)  # 添加行
            self.process_packet(packet_count_list[i], i)  # 处理完第一个数据包后,代码会自动继续到下一个数据包
            time.sleep(0.0000001)

        # 复选框
        row_num = self.ui.tableWidget.rowCount()  # 获取当前表格共有多少行
        col_num = self.ui.tableWidget.columnCount()  # 获取当前表格共有多少列

        for row in range(0, row_num):
            for col in range(8, col_num):
                checkbox = QCheckBox()
                all_header_combobox.append(checkbox)  # 将所有的复选框都添加到 全局变量 all_header_combobox 中
                self.ui.tableWidget.setCellWidget(row, col, checkbox)  # 为指定行和列添加复选框
                checkbox.stateChanged.connect(self.Select)  # 连接复选框的点击事件
    def Select(self):
        if all_header_combobox:
            for checkbox in all_header_combobox:
                if checkbox.isChecked():
                    # 获取当前点击的单元格所在的行号和列号
                    index = self.ui.tableWidget.indexAt(checkbox.pos())
                    row = index.row()
                    col = index.column()
                    print("点击:")
                    print(row)
                    print(col)
        else:
            print("复选框对象未初始化")

点击表头即可正反排序

当用户点击某一列时,会根据当前的排序方向改变排序方向,并进行排序。这里的关键在于正确处理排序方向的切换。我们可以使用一个布尔变量来跟踪当前的排序方向,以便在用户再次点击同一列时切换方向。

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.sort_direction = Qt.AscendingOrder  # 初始化排序方向为正序

        self.setWindowTitle("QTableWidget 单列排序示例")
        self.setGeometry(100, 100, 600, 400)

        self.table = QTableWidget()
        self.table.setColumnCount(3)

        self.table.setHorizontalHeaderLabels(["姓名", "年龄", "城市"])

        data = [
            ["一", 28, "北京"],
            ["二", 22, "上海"],
            ["三", 35, "广州"],
            ["四", 24, "深圳"],
            ["五", 32, "杭州"]
        ]
        self.table.setRowCount(len(data))
        for row_index, row_data in enumerate(data):
            for col_index, item in enumerate(row_data):
                self.table.setItem(row_index, col_index, QTableWidgetItem(str(item)))

        self.table.horizontalHeader().sectionClicked.connect(self.sort_table)

        layout = QVBoxLayout()
        layout.addWidget(self.table)

        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def sort_table(self, column):
        if self.table.horizontalHeader().sortIndicatorSection() == column:
            if self.sort_direction == Qt.AscendingOrder:
                self.sort_direction = Qt.DescendingOrder
            else:
                self.sort_direction = Qt.AscendingOrder
        else:
            self.sort_direction = Qt.AscendingOrder  # 如果点击了不同的列,则重置排序方向为正序

        self.table.horizontalHeader().setSortIndicator(column, self.sort_direction)
        self.table.sortItems(column, self.sort_direction)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值