80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
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())
|
||
|