【问题标题】:Python: Save a file based on user inputPython:根据用户输入保存文件
【发布时间】:2026-01-13 07:55:01
【问题描述】:

我正在尝试通过“另存为”提示从 python tkinter 窗口保存文件。我已经寻找了一段时间,似乎无法找到我正在寻找的答案。我可以成功地将信息保存到具有默认名称的文件中,甚至可以使用用户通过 input() 输入的名称保存它,但是,这不是我想要做的。我希望用户能够单击“另存为”,然后当提示出现时,他们输入文件名并保存为该名称,我似乎无法在任何地方找到答案。这是我此时的代码:

# Import Tkinter
from tkinter import *
import os
import pickle
from tkinter.filedialog import askopenfilename, asksaveasfile
from tkinter.messagebox import *

MainWindow = Tk()
MainWindow.geometry("600x400")
MainWindow.attributes("-alpha", 1)
MainWindow.title(string="Hours Log")
CurrentDirect=os.getcwd()

def FileSaveAs():
fname = asksaveasfile(initialdir=CurrentDirect ,filetypes=(("Text Files", "*.txt"),
                                       ("All files", "*.*") ))
if fname:
        try:
            print(fname)
            SH = SHVar.get()
            SM = SMVar.get()
            SAP = SAPVar.get()
            EH = EHVar.get()
            EM = EMVar.get()
            EAP = EAPVar.get()
            DM = DMVar.get()
            DD = DDVar.get()
            DY = DYVar.get()
            DE = Description.get("1.0", END)
            AP = APVar.get()
            with open("filename.txt", 'wb') as f:
                pickle.dump([SH, SM, SAP, EH, EM, EAP, DM, DD, DY, DE, AP], f)

        except:
            showerror("FILE SAVE ERROR", "Error on Saving File!\n'%s'" % fname)
        return

我知道“filename.txt”是要保存到的文件的名称,但是如何从提示中获取变量名称?

注意:此代码中没有错误,它与我的程序的其余部分运行良好。

【问题讨论】:

    标签: python windows python-3.x tkinter pickle


    【解决方案1】:

    您可以使用asksaveasfilename 代替asksaveasfilefname 代替"filename.txt"

      60   def asksaveasfile(self):
      61 
      62     """Returns an opened file in write mode."""
      63 
      64     return tkFileDialog.asksaveasfile(mode='w', **self.file_opt)
      65 
      66   def asksaveasfilename(self):
      67 
      68     """Returns an opened file in write mode.
      69     This time the dialog just returns a filename and the file is opened by your own code.
      70     """
    

    【讨论】:

    • 成功了,谢谢!我只是将这些行从:fname = asksaveasfile(...with open("filename.txt", 'wb') as f: 更改为:fname = asksaveasfilename(...with open(filename+".txt", 'wb') as f: 它总是让我很简单。
    最近更新 更多