PyQt5中的Tabel View

文章目录

    • 1. 简介
    • 2. 常用方法和信号
      • 2.1 常用方法:
      • 2.2 常用信号:
    • 3. 常用方法举例说明
    • 4. 常用信号举例说明

1. 简介

PyQt5中的TableView是一个用于显示表格数据的组件,它通常用于显示和编辑二维数据集,比如数据库查询结果、CSV文件内容等。TableView提供了一个类似于Excel表格的界面,用户可以在其中查看、编辑、排序和过滤数据。

要使用TableView,你需要先创建一个数据模型(Model),通常使用Qt提供的QAbstractTableModel或者QStandardItemModel,或者你也可以自定义数据模型。然后,将这个数据模型设置给TableView,TableView会根据数据模型中的内容自动渲染表格。

除了显示数据外,TableView还提供了许多功能,如列排序、行选取、列选取、拖放等。你可以根据需要自定义TableView的外观和行为,使其符合你的应用程序需求。

2. 常用方法和信号

在PyQt5中,TableView提供了许多常用的方法和信号,以下是其中一些:

2.1 常用方法:

  1. setModel(model): 设置数据模型。
  2. setSelectionModel(selectionModel): 设置选择模型,用于控制选中的行和列。
  3. sortByColumn(column, order): 按照指定列进行排序。
  4. selectRow(row), selectColumn(column): 选中指定行或列。
  5. currentIndex(): 返回当前选择的单元格的索引。
  6. resizeColumnsToContents(), resizeRowsToContents(): 根据内容自动调整列宽和行高。
  7. setEditTriggers(triggers): 设置触发编辑的条件,比如双击、单击等。
  8. showGrid(bool): 显示或隐藏网格线。
  9. hideColumn(column), showColumn(column): 隐藏或显示指定列。
  10. setSortingEnabled(bool): 启用或禁用排序功能。

2.2 常用信号:

  1. clicked(index): 单元格被单击时发出的信号。
  2. doubleClicked(index): 单元格被双击时发出的信号。
  3. pressed(index): 单元格被按下时发出的信号。
  4. currentChanged(current, previous): 当前选中项发生改变时发出的信号。
  5. activated(index): 单元格被激活时发出的信号。
  6. dataChanged(topLeft, bottomRight): 数据发生改变时发出的信号。
  7. selectionChanged(selected, deselected): 选择发生改变时发出的信号。

这些方法和信号可以帮助你控制TableView的外观和行为,以及对表格数据进行操作和处理。

3. 常用方法举例说明

import sys
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QHBoxLayout
from PyQt5.QtGui import QStandardItemModel, QStandardItem

class QtableViewExample(QWidget):
    def __init__(self):
        super().__init__()

        # 初始化用户界面
        self.initUI()

    def initUI(self):
        # 设置窗口标题和大小
        self.setWindowTitle('QTable View Example')
        self.resize(500, 300)

        # 创建水平布局
        h_layout = QHBoxLayout()

        # 创建一个TableView并将其放置在水平布局中
        table_view = QTableView(self)
        h_layout.addWidget(table_view)

        # 创建一个数据模型
        model = QStandardItemModel(4, 3)

        # 设置数据模型的表头标签
        model.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"])

        # 向数据模型中填充数据
        for row in range(4):
            for column in range(3):
                item = QStandardItem(f"Row {row}, Column {column}")
                model.setItem(row, column, item)

        # 将数据模型设置给TableView
        table_view.setModel(model)

        # 调整所有列的宽度以适应内容
        table_view.resizeColumnsToContents()

        # 调整所有行的高度以适应内容
        table_view.resizeRowsToContents()

        # 显示网格线
        table_view.showGrid()

        # 将水平布局设置为窗口的布局
        self.setLayout(h_layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = QtableViewExample()
    ex.show()
    sys.exit(app.exec_())

运行结果如下:

在这里插入图片描述

4. 常用信号举例说明

import sys
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QHBoxLayout, QVBoxLayout, QPlainTextEdit
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtCore import QModelIndex

class QtableViewExample(QWidget):
    def __init__(self):
        super().__init__()

        # 初始化用户界面
        self.initUI()

    def initUI(self):
        # 设置窗口标题和大小
        self.setWindowTitle('QTable View Example')
        self.resize(600, 400)

        # 创建水平布局
        h_layout = QHBoxLayout()

        # 创建一个TableView并将其放置在水平布局中
        table_view = QTableView(self)
        h_layout.addWidget(table_view)

        # 创建一个垂直布局
        v_layout = QVBoxLayout()

        # 创建一个文本编辑框用于显示输出信息
        self.output_text = QPlainTextEdit()
        v_layout.addWidget(self.output_text)

        # 将垂直布局和水平布局组合到主布局中
        main_layout = QHBoxLayout()
        main_layout.addLayout(h_layout)
        main_layout.addLayout(v_layout)

        # 设置主布局
        self.setLayout(main_layout)

        # 创建一个数据模型
        model = QStandardItemModel(4, 3)

        # 设置数据模型的表头标签
        model.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"])

        # 向数据模型中填充数据
        for row in range(4):
            for column in range(3):
                item = QStandardItem(f"Row {row}, Column {column}")
                model.setItem(row, column, item)

        # 将数据模型设置给TableView
        table_view.setModel(model)

        # 调整所有列的宽度以适应内容
        table_view.resizeColumnsToContents()

        # 调整所有行的高度以适应内容
        table_view.resizeRowsToContents()

        # 显示网格线
        table_view.showGrid()

        # 连接信号和处理函数
        table_view.clicked.connect(self.cell_clicked)
        table_view.doubleClicked.connect(self.cell_double_clicked)
        table_view.selectionModel().selectionChanged.connect(self.selection_changed)
        table_view.pressed.connect(self.cell_pressed)
        table_view.selectionModel().currentChanged.connect(self.current_changed)

    # 处理单元格单击事件的函数
    def cell_clicked(self, index: QModelIndex):
        self.output_text.appendPlainText(f"Cell clicked at: {index.row()}, {index.column()}")

    # 处理单元格双击事件的函数
    def cell_double_clicked(self, index: QModelIndex):
        self.output_text.appendPlainText(f"Cell double-clicked at: {index.row()}, {index.column()}")

    # 处理选择变化事件的函数
    def selection_changed(self, selected, deselected):
        selected_indexes = selected.indexes()
        self.output_text.appendPlainText("Selection changed to:")
        for index in selected_indexes:
            self.output_text.appendPlainText(f"- {index.data()}")

    # 处理单元格按下事件的函数
    def cell_pressed(self, index: QModelIndex):
        self.output_text.appendPlainText(f"Cell pressed at: {index.row()}, {index.column()}")

    # 处理当前单元格变化事件的函数
    def current_changed(self, current, previous):
        if current.isValid():
            self.output_text.appendPlainText(f"Current cell changed to: {current.row()}, {current.column()}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = QtableViewExample()
    ex.show()
    sys.exit(app.exec_())

运行结果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/624286.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++复习 -- 常用关键字

this 关键字: 概念 在 C 中&#xff0c; this 关键字是一个指向调用对象的指针。它在成员函数内部使用&#xff0c;用于引用调用该函数的对象。使用 this 可以明确指出成员函数正在操作的是哪个对象的数据成员。 case :证明他就是一个指向被调用对象的指针: #include <iost…

2024版OWASP移动应用系统10大安全风险简析

这是自2016年以来该机构首次对移动应用系统相关的风险进行更新&#xff0c;重点增加了对供应链安全、隐私保护等方面的风险关注。 随着移动互联网用户数量急剧增长&#xff0c;移动应用系统已经实现了典型生活场景的全覆盖&#xff0c;并渗透到了多个企业级应用领域。移动应用的…

HTML飘落的花瓣

目录 写在前面 HTML​​​​​​​简介 完整代码 代码分析 系列推荐 写在最后 写在前面 本期小编给大家推荐HTML实现的飘落的花瓣&#xff0c;无需安装软件&#xff0c;直接下载即可打开~ HTML​​​​​​​简介 HTML&#xff08;Hypertext Markup Language&#xff…

STM32学习和实践笔记(28):printf重定向实验

1.printf重定向简介 在C语言中printf函数里&#xff0c;默认输出设备是显示器&#xff0c;如果想要用这个函数将输出结果到串口或者LCD上显示&#xff0c;就必须重定义标准库函数里中printf函数调用的与输出设备相关的函数。 比如要使用printf输出到串口&#xff0c;需要先将f…

灌区信息化管理平台软件如何建设?

随着科技的飞速发展&#xff0c;数字孪生技术正逐渐渗透到各个行业领域&#xff0c;其中&#xff0c;数字孪生灌区的建设成为了智慧水利的重要组成部分。那么&#xff0c;究竟如何进行数字孪生灌区信息化管理平台软件建设呢&#xff1f;本文将为您揭开这一神秘面纱&#xff0c;…

引用和实体完整性

本文将详细讲解在数据库服务器级具有引用和实体完整性的好处&#xff0c;包括如何在字段中设置默认值、检查约束和引用约束&#xff0c;以及在何时发生约束检查。通过遵循这些指导原则&#xff0c;可以确保数据的一致性和准确性。 1.完整性 完整性指数据库中数据的准确性或正确…

【Linux线程(二)】线程互斥和同步

前言&#xff1a; 在上一篇博客中&#xff0c;我们讲解了什么是线程以及如何对线程进行控制&#xff0c;那么了解了这些&#xff0c;我们就可以在程序中创建多线程了&#xff0c;可是多线程往往会带有许多问题&#xff0c;比如竞态条件、死锁、数据竞争、内存泄漏等问题&#…

福建聚鼎:做装饰画到底能不能赚钱

在探讨做装饰画能否成为盈利的行当之前&#xff0c;我们必须认识到任何一门艺术或手工的价值并非仅仅取决于其直接的经济收益。艺术创作本身就是一种文化传承和个人情感表达的方式&#xff0c;它对创作者和社会都有着不可估量的精神价值。然而&#xff0c;将话题限定在经济回报…

【机器学习300问】81、什么是动量梯度下降算法?

动量梯度下降算法&#xff08;Momentum&#xff09;是利用指数加权移动平均的思想来实现梯度下降的算法。让我们先来回顾一下基础的梯度下降方法以及看看它有哪些不足之处。接着引出动量梯度下降算法&#xff0c;在理解了它的原理后看看它是如何规避之前方法的不足的。 如果不知…

Java开发大厂面试第01讲:String 的特点及其重要的方法都有哪些?

几乎所有的 Java 面试都是以 String 开始的&#xff0c;如果第一个问题没有回答好&#xff0c;则会给面试官留下非常不好的第一印象&#xff0c;而糟糕的第一印象则会直接影响到自己的面试结果&#xff0c;就好像刚破壳的小鹅一样&#xff0c;会把第一眼看到的动物当成自己的母…

制药行业新突破:CANOpen转PROFINET网关配置案例解析

在药品制造工业环境中&#xff0c;实现CanOpen转Profinet协议之间转换的网关配置是一个关键过程&#xff0c;确保了不同通信协议的设备能够互相协作。以开疆智能CanOpen转Profinet网关为例&#xff0c;以下是其配置流程&#xff1a;首先安装CanOpen转Profinet网关的配置软件&am…

Linux禁用危险命令和防止误操作

禁用rm命令 编辑/etc/profile文件&#xff0c;结尾添加 ###### rm prevent ###### alias rmecho can not use rm command使用source命令生效 source /etc/profile效果 使用mv命令代替rm命令 将需要删除的文件移动到特定的目录&#xff0c;比如/home/sharedir/ 在.bashrc目…

波卡 2024 一季度报告:XCM 创下历史新高,JAM 链将引领 Polkadot 2.0 新风向

作者&#xff1a;Nicholas Garcia&#xff5c;Messari 研究分析师 编译&#xff1a;OneBlock 原文&#xff1a;https://messari.io/report/state-of-polkadot-q1-2024 近期&#xff0c;Messari Crypto 发布了 Polkadot 2024 年 Q1 状况的数据报告。OneBlock 为你梳理了本篇报…

python批量为图片做灰度处理

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结

MES管理系统在柔性制造中有何重要作用

在当今这个瞬息万变的商业环境中&#xff0c;制造业正经历着一场前所未有的转型。消费者需求的多样化和市场动态的快速变化要求企业必须具备高度的灵活性和适应性。为了应对这些挑战&#xff0c;柔性制造策略应运而生&#xff0c;它以其快速响应和灵活调整的能力&#xff0c;成…

vue3中的watch侦听器

在有些情况下&#xff0c;我们需要在状态变化时执行一些“副作用”&#xff1a;例如更改 DOM &#xff0c;或是根据异步操作的结果去修改另一处的状态。在组合式 API 中&#xff0c;我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数。 watch 函数可以侦听被 ref…

计算机的一些基础知识分享

windows操作系统中&#xff0c;用于查看当前文件下的目录是&#xff1f; 在Windows操作系统中&#xff0c;如果您想要查看当前文件夹下的目录&#xff0c;您可以使用命令提示符&#xff08;CMD&#xff09;或PowerShell。在这些环境中&#xff0c;可以使用以下命令&#xff1a;…

bmi088-linux驱动(I2C)

电气特性&#xff1a; 在正常工作时&#xff0c;gyro 工作电流为5mA&#xff0c;acc 工作电流为150uA。 SPI 时钟和数据电平范围 0 -3.6 结构框图如下&#xff1a; 硬件连接图如下&#xff1a; note&#xff1a; 1. 通过PS引脚选择通讯协议&#xff0c;上拉引脚则选择的是I2C…

HCIP的学习(16)

BGP的状态机 ​ OSPF的状态机是在描述整个协议的完整工作过程&#xff0c;而BGP的状态机仅描述的是对等体关系建立过程中的状态变化。-----因为BGP将邻居建立过程以及BGP路由收发过程完全隔离。 ​ IGP协议在启动后&#xff0c;需要通过network命令激活接口&#xff0c;从而使…

企业运维背后的故事:TASKCTL带你了解日常工作与技术演进

今天&#xff0c;作为一名经验丰富、从业多年经常与运维人员打交道的人&#xff0c;我想与大家聊聊运维的日常工作、部门协调以及未来发展&#xff0c;希望能为即将转行或正在从事运维工作的你&#xff0c;提供一些新的视角和启发。 运维的日常工作&#xff1a;挑战与乐趣并存 …