here is the QT GUI code
from PyQt6.QtWidgets import QApplication, QMainWindow, QTableWidgetItem, QMessageBox
from sindainterpolation import Ui_MainWindow # 导入由pyuic6生成的Python文件
import VTK2SINDA
import tkinter as tk
from tkinter import filedialog
from pathlib import Path
import pandas as pd
class MainWindow(QMainWindow, Ui_MainWindow):
def init(self):
super().init()
self.setupUi(self)
self.getPathButtom.clicked.connect(self.getEngineerPath)
self.TableAdd.clicked.connect(self.TableAddRow)
self.TableDelete.clicked.connect(self.TableDelRow)
self.ImportEnvelopeButtom.clicked.connect(self.readEnvelopeTable)
self.InterpButtom.clicked.connect(self.interpolation)
self.EnvelopeTable.setSortingEnabled(True)
self.msg_box = QMessageBox()
def getEngineerPath(self): # 浏览按钮被点击
# 创建一个Tk根窗口,但不显示
root = tk.Tk()
root.withdraw()
# 打开文件选择对话框,并获取用户选择的文件路径
file_path = filedialog.askopenfilename(
title="选择网格文件",
initialdir="/", # 起始目录
filetypes=[("nastran mesh files", "*.bdf")] # 文件类型过滤
)
# 返回选择的文件路径
directory,filename = self.get_file_path_and_split(file_path)
self.MeshFileName.setText(filename)
self.DirPath.setText(directory)
def get_file_path_and_split(self,file_path):
# 创建Path对象
path = Path(file_path)
# 拆分文件名和路径
directory = path.parent # 获取目录路径
filename = path.name # 获取文件名
return str(directory), filename
def TableAddRow(self):
self.EnvelopeTable.insertRow(self.EnvelopeTable.rowCount())
def TableDelRow(self):
# 获取选中的行号
selected_index = self.EnvelopeTable.selectionModel().selectedRows()
model = self.EnvelopeTable.model()
for index in selected_index:
model.removeRow(index.row())
def readEnvelopeTable(self):
root = tk.Tk()
root.withdraw()
if self.DirPath.toPlainText() is None:
dir = '/'
else:
dir = self.DirPath.toPlainText()
# 打开文件选择对话框,并获取用户选择的文件路径
file_path = filedialog.askopenfilename(
title="选择包线csv",
initialdir= dir, # 起始目录
filetypes=[("包线配置文件", "*.csv")] # 文件类型过滤
)
if file_path == '':
self.msg_box.setWindowTitle("Message")
self.msg_box.setText("未选择合适文件")
return self.msg_box.exec()
data = pd.read_csv(file_path)
self.sourcefile = [data.iloc[:, 0].tolist(), data.iloc[:, 1].tolist(), data.iloc[:, 2].tolist()]
self.EnvelopeTable.clear()
self.EnvelopeTable.setRowCount(data.shape[0])
self.EnvelopeTable.setColumnCount(data.shape[1])
for j in range(data.shape[1]):
for i,cell in enumerate(self.sourcefile[j]):
item = QTableWidgetItem(str(cell))
self.EnvelopeTable.setItem(i, j, item)
def interpolation(self):
self.sindafile = self.DirPath.toPlainText() + '\\' + self.MeshFileName.toPlainText()
self.outputname = self.DirPath.toPlainText() + '\\' + self.OutputFileName.toPlainText()
interpolator = VTK2SINDA.sindainterp(self.sourcefile, self.sindafile)
interpolator.Gensindainpfile(self.outputname)
self.msg_box.setWindowTitle("Message")
self.msg_box.setText("导出成功")
self.msg_box.exec()
if name == “main”:
app = QApplication()
window = MainWindow()
window.show()
app.exec()