pyqt 文件对话框使用装饰器后闪退
装饰器代码,测量函数运行时间
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} took {end_time - start_time:.2f} seconds to execute.")
return result
return wrapper
涉及到两个函数有异常,其他函数正常
有问题的两个函数,一个是文件打开,一个是文件另存为
def open(self):
print("打开")
"""选择文件对话框"""
# QFileDialog组件定义
fileDialog = QFileDialog(self)
# QFileDialog组件设置
fileDialog.setWindowTitle("选择文件") # 设置对话框标题
fileDialog.setFileMode(QFileDialog.AnyFile) # 设置能打开文件的格式
fileDialog.setDirectory(r'C:\Users\Administrator\Desktop\CTX') # 设置默认打开路径
fileDialog.setNameFilter("数据源(*.csv *.xlsx *.xls *.txt)") # 按文件名过滤
self.file_pa = fileDialog.exec() # 窗口显示,返回文件路径
if self.file_pa and fileDialog.selectedFiles():
print("选择文件成功:{}".format(fileDialog.selectedFiles()[0]))
self.file_path = fileDialog.selectedFiles()[0]
self.read()
def saveas(self):
# 重新选择文件路径,重新确定文件名
"""文件另存对话框"""
file_path, file_type = QFileDialog.getSaveFileName(self, '文件保存', r'C:\Users\Administrator\Desktop\CTX',
'文本文档(*.txt);;Excel 工作簿(*.xlsx);;Excel 97-2003工作簿(*.xls;;CSV (逗号分隔)(*.csv')
file_end = self.file_path.split(".")[-1]
print(1111)
# 读取表格数据,再存储到原路径
rown = self.table.model().rowCount()
print("rown", rown)
coln = self.table.model().columnCount()
# 用二维列表存储
self.assave_date = []
if file_end == "txt":
text_list = self.Qtext.toPlainText()
self.assave_date = text_list.split("\n")
print("asdata", self.assave_date)
else:
for i in range(rown):
l = []
for j in range(coln):
item = self.table.model().item(i, j)
text = item.text()
l.append(text)
self.assave_date.append(l)
print("self.save_date", self.assave_date)
if file_end in ("xlsx", "xls"):
df = pd.DataFrame(self.assave_date)
df = df.reset_index(drop=True)
df.to_excel(file_path, index=False, header=None)
if file_end == "csv":
df = pd.DataFrame(self.assave_date)
df = df.reset_index(drop=True)
df.to_csv(file_path, index=False, header=None)
if file_end == "txt":
print("self.save_date", self.assave_date)
print("file_path", file_path)
df = pd.DataFrame(self.assave_date)
df = df.reset_index(drop=True)
df.to_csv(file_path, sep='\t', index=False, header=None)