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