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

表格控件,还有一个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_())

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

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

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

今日头条:老陈说编程,到2021年国庆节,Python就全部分享完了,完整的课程有:
1.《12天搞定Python》
2.《16天搞定Python数据分析》
3.《10天搞定Python网络爬虫》
4. 《Django3.0项目实战》
5. 《25天学会Wxpython》
6. 《28天学会PyQt5》发布中
7. 《25天学会Seaborn数据分析》在csdn发布完了
8. 《3天搞定Pyecharts数据分析》国庆期间发布

上一篇:c-QApplication是惰性的(或使其他线程在应用程序中是惰性的)


下一篇:QT表头拖动