计算机系统应用教程网站

网站首页 > 技术文章 正文

第25天 | 28天学会PyQt5,高级控件之QTableWidget

btikc 2024-10-20 05:04:46 技术文章 8 ℃ 0 评论

表格控件,还有一个QTableWidget,它继承自QTableView。QTableWidget和QTableView的主要区别是QTableView可以使用自定义的数据模型来显示内容,而QTableWidget只能使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象来实现的。通常情况下,使用QTableWidget就能够满足我们的大多数要求。它常用的方法,除了用QTableView的方法外,还可用下表所示的方法:

方法

描述

setRowCount(int rows)

设置表格控件的行数;

setColumnCount(int column)

设置表格控件的列数;

setHorizontalHeaderLabels([str] labels)

用于一次性顺序设置水平表头多个节显示的文本,该方法无返回值。设置了标签的节自动会创建该节对应的项;

setVerticalHeaderLabels([str] labels)

用于一次性顺序设置垂直表头多个节显示的文本,该方法无返回值。设置了标签的节自动会创建该节对应的项;

setTextAlignment()

设置单元格内文本的对齐方式;

currentColumn()

获取选中列的下标;

currentRow()

获取选中行的下标;

currentItem()

获取item之后,可用text()方法获取内容;

selectedItems()

获取List[QTableWidgetItem],可用循环获取每一列的内容值;

item(int row, int column)

用行和列的下标获取内容。

程序清单:tablewidget.py

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget, 
  QHBoxLayout, QTableWidget, QTableWidgetItem, QAbstractItemView


# 继承QWidget
class TableWidget(QWidget):
    customer_list = [("张三", "男", "1981-06-02", "13888888888",
                      "南极路企鹅临舍傍9号999路"),
                     ("李四", "男", "1988-08-08", "13999999999", 
                      "北极熊店的下坡路中6号666路"),
                     ("李清照", "女", "1986-06-06", "13666666666",
                      "秦岭古诗庙湾道8号888路")]
    table_widget = None

    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 设置布局
        layout = QHBoxLayout()
        # 数据层次结构,10行5列
        self.table_widget = QTableWidget(10, 5)
        # 最后一列自动拉伸
        self.table_widget.horizontalHeader().setStretchLastSection(True)
        # 输入内容
        for (row, customer) in enumerate(self.customer_list):
            for column in range(len(customer)):
                self.table_widget.setItem(row, column,
                                  QTableWidgetItem(customer[column]))
        layout.addWidget(self.table_widget)
        # 合并行列
        self.table_widget.setSpan(0, 1, 2, 1)
        # 单元格不可编辑
        self.table_widget.setEditTriggers(QTableWidget.NoEditTriggers)
        # 选择单行
        self.table_widget.setSelectionBehavior(QAbstractItemView
                                               .SelectRows)
        # 单击事件
        self.table_widget.cellClicked.connect(self.table_click)
        # 双击事件
        self.table_widget.cellDoubleClicked.connect(self.double_click)
        self.setLayout(layout)
        # 调整窗口大小
        self.resize(900, 500)
        # 窗口居中
        self.center()
        # 窗口标题
        self.setWindowTitle("QTableWidget应用")
        # 显示窗口
        self.show()
        # 获取文件夹路径

    def table_click(self):
        # 获取选中文本所在的列
        item_list = self.table_widget.selectedItems()
        for item in item_list:
            print(item.text())
        # 选中行
        row = self.table_widget.currentRow()
        # 选中列
        column = self.table_widget.currentColumn()
        data = self.table_widget.item(row, column).text()
        print(data)

    def double_click(self):
        # 选中行
        data = self.table_widget.currentItem()
        print("选中单元格的数据:%s" % data.text())

    # 实现居中
    def center(self):
        f = self.frameGeometry()
        c = QDesktopWidget().availableGeometry().center()
        f.moveCenter(c)
        self.move(f.topLeft())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = TableWidget()
    sys.exit(app.exec_())

运行程序之后,弹出的窗口如下:

好了,QTableWidget的内容就说到这了,关注我,下一节更精彩。

码字不易,你的关注和转发是对我最大的鼓励,谢谢!

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!

#python##程序员##好平台好讲师##桌面##热搜#

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表