我可以使用 Tkinter 文件对话框保存 Pandas DataFrame 吗?

问题描述 投票:0回答:2

我对编程相当陌生,甚至对 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

我的代码不会产生任何错误,只是简单地在对话框中保存我尝试的所有内容。现在我在实际代码中注释掉了文件对话框,但如果有人可以指导我找到可能的解决方案,我将不胜感激!

python sql pandas tkinter
2个回答
2
投票

这是 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)

2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.