PySide在Qt Designer中使用QTableView 显示表格数据

在 PySide6 中,可以使用 Qt Model View 架构中的 QTableView 部件来显示和编辑表格数据。

 1、创建ui文件

在Qt Designer中新建QMainWindow,命名为csvShow.ui。QMainWindow上有两个部件:tableview和btn_exit。

2、使用pyuic工具将ui文件转换为py文件并导入

主脚本: 

# encoding: utf-8
import csv

from PySide6.QtCore import QObject, Signal, QAbstractTableModel, QModelIndex, Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QHeaderView
import sys

import csvShow_rc  # 导入需要显示的画面


# 定义需要显示的画面类
class MainWindow(QMainWindow, csvShow_rc.Ui_MainWindow):
    def __init__(self):
        super().__init__()


# 作业函数
class Jobs:
    # 系统的初始化
    @staticmethod
    def start_todo():
        # 打开csv文件并生成表格数据
        def read_csv(csv_path):
            try:
                # 打开 CSV 文件
                with open(csv_path, newline='', encoding='gbk') as csvfile:
                    reader = csv.reader(csvfile)
                    return list(reader)   # 表格的数据
            except FileNotFoundError:
                print(f"Error: 文件未找到.")
        # 生成表格数据
        ui.table_data = read_csv('demo.csv')

        # 设置表格界面
        ui.table_data[3][6] = '这个是修改后的数据格'
        Jobs.set_tableView(window1.tableView, ui.table_data)
        # window1.tableView.setColumnWidth(6, 150)   # 设置列宽
        # window1.tableView.setRowHeight(0, 200)   # 设置行高

    # 设置表格界面
    @staticmethod
    def set_tableView(tableView, table_data, vHeader_show=False, hHeader_show=False):
        model = MyTableModel(table_data)
        tableView.setModel(model)
        tableView.verticalHeader().setVisible(vHeader_show)  # 显示或不显示行号和列号
        tableView.horizontalHeader().setVisible(hHeader_show)

    # 退出系统前的保存、清理、释放等操作
    @staticmethod
    def before_quit():
        pass


# 表格的模型
class MyTableModel(QAbstractTableModel):
    def __init__(self, data):
        super().__init__()
        self._data = data

    # 重新定义行数
    def rowCount(self, parent=QModelIndex()):
        return len(self._data)

    # 重新定义列数
    def columnCount(self, parent=QModelIndex()):
        return len(self._data[0]) if self._data else 0

    # 重新定义数据
    def data(self, index, role=Qt.DisplayRole):
        if not index.isValid():
            return None
        if role == Qt.DisplayRole:
            return self._data[index.row()][index.column()]
        return None


# 信号连接和槽函数
def signal_slot():
    # slot函数的demo
    def window1_btn_exit_clicked():  # 定义槽函数
        window1.close()

    window1.btn_exit.clicked.connect(window1_btn_exit_clicked)  # 连接信号到槽函数

    # 定义全局信号的槽函数
    def slot_signal1():
        pass

    ui.Signal1.connect(slot_signal1)  # 连接信号到槽函数

    # 退出系统之前的操作
    app.aboutToQuit.connect(Jobs.before_quit)


# #############################主程序##################################
if __name__ == '__main__':
    app = QApplication(sys.argv)

    # #######################项目级别的定义#############################
    class UI(QObject):  # 将项目定义为QObject,用来管理项目级别的信号和变量
        Signal1 = Signal()  # 这是一个全局的信号

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


    # ########################本项目的实例化############################
    ui = UI()  # 项目实例化

    # ########################实例化画面###############################
    window1 = MainWindow()  # 画面实例化

    window1.show()  # 显示画面
    window1.setupUi(window1)  # 画面初始化
    Jobs.start_todo()  # 系统的初始化

    # 信号的连接和槽函数
    signal_slot()
    sys.exit(app.exec())

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 22:16:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 22:16:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 22:16:04       58 阅读
  4. Python语言-面向对象

    2024-07-15 22:16:04       69 阅读

热门阅读

  1. .NET Core项目中添加MIME类型

    2024-07-15 22:16:04       21 阅读
  2. 对于RBAC模型的认识

    2024-07-15 22:16:04       20 阅读
  3. 开源项目面临的机遇与挑战

    2024-07-15 22:16:04       20 阅读
  4. 【C++语言】正则表达式

    2024-07-15 22:16:04       20 阅读
  5. Mybatis防止SQL注入

    2024-07-15 22:16:04       21 阅读
  6. Vue2中的指令修饰符

    2024-07-15 22:16:04       19 阅读
  7. Python面试题:如何在 Python 中处理大数据集?

    2024-07-15 22:16:04       22 阅读
  8. 安全编织:Eureka驱动的分布式服务网格安全策略

    2024-07-15 22:16:04       22 阅读
  9. 速盾:cdn加速能提高多少?

    2024-07-15 22:16:04       16 阅读
  10. einsum算子不支持问题处理

    2024-07-15 22:16:04       21 阅读
  11. Vant Ui 最新访问地址

    2024-07-15 22:16:04       19 阅读