我对编程相当陌生,甚至对 Tkinter 也比较陌生。
我正在设置一个与 SQL Server 配合使用的 GUI,以允许前端用户检索、更新和删除某些信息。
目前我的一切都可以正常通信和工作,但我有一个使用 Pandas 将结果列表导出到 Excel 文件的功能。导出工作正常,但它具有我在 Pandas to_excel 方法中给它的静态名称和目录。
我想使用 Tkinter Asksaveasfilename 对话框来允许用户命名并选择文件导出位置,但我似乎无法弄清楚它如何与此对话框一起使用(如果可能的话)。对话框代码中是否有一个选项可以让我指定要保存的信息?
def exportFunc():
pd.DataFrame(data).to_excel("TestList.xlsx", header=False, index = True)
filedialog.asksaveasfilename(initialdir = "/", title = 'Save File', filetypes = ("Excel File", "*.xlsx"))
pass
我的代码不会产生任何错误,只是简单地在对话框中保存我尝试的所有内容。现在我在实际代码中注释掉了文件对话框,但如果有人可以指导我找到可能的解决方案,我将不胜感激!
这是 10 个月前发布的,但我希望这个答案也能帮助其他新手在谷歌上搜索这个答案。
我解决这个问题的方法是注意到asksaveasfile函数输出一个包含用户指定的文件路径和文件名的值。例如:
< closed file u'E:Filepath/AnotherPath/work2.xlsx', mode 'w' at 2119x6710 >
然后我使用正则表达式和替换方法来删除文件路径周围的所有值,一旦完成,to_excel函数将被视为硬编码。
希望这对那里的人有帮助!
out = tkFileDialog.asksaveasfile(mode='w', defaultextension=".xlsx")
out.close()
restr = str(out)
RegexPrep = restr.replace("'w'", '')
outRegex = re.findall(r"'(.*?)'", RegexPrep)
ToExcelRegex = str(outRegex)
MorePrep = ToExcelRegex.replace("[",'')
MorePrep = MorePrep.replace("]",'')
MorePrep = MorePrep.replace("'",'')
Final = MorePrep.strip()
find.to_excel(Final, index=False)
Asksaveasafile 返回一个文件对象,因此我们可以使用它来保存 df。
from tkinter import filedialog, Tk
import pandas as pd
df = pd.DataFrame(
{"Test": range(20)}
)
root = Tk() # this is to close the dialogue box later
try:
# with block automatically closes file
with filedialog.asksaveasfile(mode='w', defaultextension=".xlsx") as file:
df.to_excel(file.name)
except AttributeError:
# if user cancels save, filedialog returns None rather than a file object, and the 'with' will raise an error
print("The user cancelled save")
root.destroy() # close the dialogue box