在 PySide6 中,可以使用 Qt Model View 架構中的 QTableView 部件來顯示和編輯表格數據。
?1、創建ui文件
在Qt Designer中新建QMainWindow,命名為csvShow.ui。QMainWindow上有兩個部件:tableview和btn_exit。
2、使用pyuic工具將ui文件轉換為py文件并導入
主腳本:?
# encoding: utf-8
import csvfrom PySide6.QtCore import QObject, Signal, QAbstractTableModel, QModelIndex, Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QHeaderView
import sysimport csvShow_rc # 導入需要顯示的畫面# 定義需要顯示的畫面類
class MainWindow(QMainWindow, csvShow_rc.Ui_MainWindow):def __init__(self):super().__init__()# 作業函數
class Jobs:# 系統的初始化@staticmethoddef 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) # 設置行高# 設置表格界面@staticmethoddef 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)# 退出系統前的保存、清理、釋放等操作@staticmethoddef 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 Noneif role == Qt.DisplayRole:return self._data[index.row()][index.column()]return None# 信號連接和槽函數
def signal_slot():# slot函數的demodef window1_btn_exit_clicked(): # 定義槽函數window1.close()window1.btn_exit.clicked.connect(window1_btn_exit_clicked) # 連接信號到槽函數# 定義全局信號的槽函數def slot_signal1():passui.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())