import sys from PySide6 import QtCore, QtGui, QtWidgets from PySide6.QtGui import QStandardItemModel, QStandardItem from PySide6.QtUiTools import QUiLoader from pathlib import Path from PySide6.QtWidgets import QFileDialog, QMainWindow, QMessageBox, QLabel, QComboBox, QVBoxLayout, QSizePolicy, \ QTableWidgetItem import pandas as pd class MainWindows(QMainWindow): UI_FILE = 'ui/main_window.ui' def __init__(self): super(MainWindows, self).__init__() self.ui = QUiLoader().load(self.UI_FILE) self.ui.SelectFileBtn.clicked.connect(self.select_excel_file) # 点击选择文件按钮后,弹出选择EXCEL窗口。 def select_excel_file(self): # 弹窗标题 caption = "请选择EXCEL文件" # 起始目录 start_dir = str(Path.home()) # 文件类型过滤器 filters = "Excel 文件 (*.xlsx *.xls);;所有文件 (*.*)" # 选择EXCEL文件 file_path, _ = QFileDialog.getOpenFileName(None, caption, start_dir, filters) if not file_path: return self.ui.FileNameEdt.setText(str(file_path)) #使用pandas读取EXCEL文件 try: # 读取第一行表头 df = pd.read_excel(file_path, nrows=10) # 不加载数据,只加载列名 headers = list(df.columns) except Exception as e: QMessageBox.critical(self,"错误",f"读取文件失败:\n{e}") return # 2. 建 model model = QStandardItemModel(self) model.setRowCount(df.shape[0]) model.setColumnCount(df.shape[1]) model.setHorizontalHeaderLabels(df.columns) # 3. 填单元格 for r, row in df.iterrows(): for c, val in enumerate(row): model.setItem(r, c, QStandardItem(str(val))) # 4. 挂到视图 self.ui.tableView.setModel(model) #动态创建标签 print(headers) for col in headers: # 生成每个LABEL标签的内容 lbl = QLabel(f"· {col}") # 在窗体中的垂直布局内放置标签 self.ui.verticalLayout_2.addWidget(lbl) self.ui.comboBox.addItems(headers) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) # 设置应用程序样式 app.setStyle("Fusion") main = MainWindows() main.ui.show() sys.exit(app.exec())