我对编程非常陌生,甚至对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
我的代码不会产生任何错误,只是用我尝试的所有内容在对话框中什么也没有保存。现在,我在我的实际代码中注释了文件对话框,但是如果有人可以指导我寻求可能的解决方案,我将不胜感激!
答案 0 :(得分:1)
这是10个月前发布的,但我希望这个答案也可以帮助其他新手也可以谷歌搜索。
我如何解决此问题的方法是注意到asksaveasfile函数输出的值包含用户指定的文件路径和文件名。例如:
<已关闭文件u'E:Filepath / AnotherPath / work2.xlsx',模式为'w',位于2119x6710>
然后我使用正则表达式和replace方法剥离文件路径周围的所有值,完成后,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)
答案 1 :(得分:0)
Asksavasafile 返回一个文件对象,因此我们可以使用它来保存 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