PySide(PyQt),csv文件的显示

时间:2024-07-17 07:14:30

1、正常显示csv文件

import sys
import csv
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QWidget

class CSVTableWidgetDemo(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建显示控件
        self.widget = QWidget(self)
        self.widget.setGeometry(100, 100, 300, 300)
        # 创建表格控件
        self.table_widget = QTableWidget(self.widget)
        self.resize(600, 400)

        # 加载 CSV 文件
        self.load_csv("demo.csv")

    def load_csv(self, filename):
        try:
            # 打开 CSV 文件
            with open(filename, newline='', encoding='gbk') as csvfile:
                reader = csv.reader(csvfile)
                csv_data = list(reader)

                # 设置行列数
                self.table_widget.setRowCount(len(csv_data))
                self.table_widget.setColumnCount(len(csv_data[0]))

                # 填充表格数据
                for row_idx, row_data in enumerate(csv_data):
                    for col_idx, col_data in enumerate(row_data):
                        item = QTableWidgetItem(col_data)
                        self.table_widget.setItem(row_idx, col_idx, item)

                # 隐藏行号和列号
                self.table_widget.verticalHeader().setVisible(False)
                self.table_widget.horizontalHeader().setVisible(False)

        except FileNotFoundError:
            print(f"Error: 文件 '{filename}' 未找到.")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = CSVTableWidgetDemo()
    window.show()
    sys.exit(app.exec())

 2、使用uic框架的demo

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

使用pyuic工具将ui文件转换为py文件并导入,主脚本:

# encoding: utf-8
import csv

from PySide6.QtCore import QObject, Signal
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidgetItem, QTableWidget
import sys

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


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


# 作业函数
class Jobs:
    # 系统的初始化
    @staticmethod
    def start_todo():
        Jobs.load_csv(window1.widget_csv, 'demo.csv')   # 加载和显示csv文件

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

    # 加载和显示csv文件
    @staticmethod
    def load_csv(widget, filename):
        widget.table_widget = QTableWidget(widget)
        widget.table_widget.setFixedSize(widget.width(), widget.height())
        try:
            # 打开 CSV 文件
            with open(filename, newline='', encoding='gbk') as csvfile:
                reader = csv.reader(csvfile)
                csv_data = list(reader)

                # 设置行列数
                widget.table_widget.setRowCount(len(csv_data))
                widget.table_widget.setColumnCount(len(csv_data[0]))

                # 填充表格数据
                for row_idx, row_data in enumerate(csv_data):
                    for col_idx, col_data in enumerate(row_data):
                        item = QTableWidgetItem(col_data)
                        widget.table_widget.setItem(row_idx, col_idx, item)

                # 隐藏行号和列号
                widget.table_widget.verticalHeader().setVisible(False)
                widget.table_widget.horizontalHeader().setVisible(False)

        except FileNotFoundError:
            print(f"Error: 文件 '{filename}' 未找到.")


# 信号连接和槽函数
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())