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())