ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-03 12:01:58  阅读:216  来源: 互联网

标签:__ 控件 widget 25 self QTableWidget item table


表格控件,还有一个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的内容就说到这了,关注我,下一节更精彩。

今日头条:老陈说编程,到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数据分析》国庆期间发布

标签:__,控件,widget,25,self,QTableWidget,item,table
来源: https://blog.csdn.net/a_faint_hope/article/details/120539588

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有