如何使用Python SaveAs对话框

6 投票
1 回答
17816 浏览
提问于 2025-04-16 23:47

我正在寻找一个Python函数,可以打开一个“另存为”对话框,并返回一个文件名作为字符串。

我很快找到了tkFileDialog模块,但发现它的asksaveasfilename函数会在输入的文件名不存在时抛出异常,这不是我想要的效果。

我觉得我想要的答案可能在Python的FileDialog模块里,但我猜可能是SaveFileDialog类的get_selection方法。下面是我在交互模式下试图搞清楚用法时的一些尝试:

>>> FileDialog.SaveFileDialog.get_selection()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: unbound method get_selection() must be called with SaveFileDialog instance as first argument (got nothing instead)
>>> x = FileDialog.SaveFileDialog()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: __init__() takes at least 2 arguments (1 given)

起初我只是想看看能否直接调用对话框。然后我发现需要一个SaveFileDialog的实例,于是我试着把它赋值给变量x。但显然这也需要两个参数,这让我真的很困惑。

有人能帮帮我吗?

1 个回答

7

这里有一个关于 asksaveasfilename() 函数的小例子。希望你能用得上:

import Tkinter, Tkconstants, tkFileDialog

class TkFileDialogExample(Tkinter.Frame):

    def __init__(self, root):

        Tkinter.Frame.__init__(self, root)
        button_opt = {'fill': Tkconstants.BOTH, 'padx': 5, 'pady': 5}
        Tkinter.Button(self, text='asksaveasfilename', command=self.asksaveasfilename).pack(**button_opt)

        self.file_opt = options = {}
        options['filetypes'] = [('all files', '.*'), ('text files', '.txt')]
        options['initialfile'] = 'myfile.txt'
        options['parent'] = root

    def asksaveasfilename(self):
        filename = tkFileDialog.asksaveasfilename(**self.file_opt)

        if filename:
            return open(filename, 'w')

if __name__=='__main__':
    root = Tkinter.Tk()
    TkFileDialogExample(root).pack()
    root.mainloop()

我可以打开(并创建)那些不存在的文件。

撰写回答