获取带有tkinter.filedialog.asksaveasfilename的文件名以附加到其中

时间:2016-10-13 08:27:56

标签: python tkinter filedialog

来自使用tkinter设计的GUI应用程序,我希望在附加模式下将一些数据保存在文件中。要获取文件名,我使用asksaveasfilename模块中的filedialog。这是代码:

from tkinter.filedialog import asksaveasfilename

def save_file():

    file_name = asksaveasfilename()

    if file_name:
        f = open(file_name, 'a')
        contents = tab_chrono.text_area.get(1.0, 'end')
        f.write(contents)
        f.close()

当我在对话框中选择现有文件时,会出现问题,我收到一条警告,说明该文件将被覆盖。因为我追加到文件中,所以不是这样。 有没有办法摆脱这个警告?或者我是否必须自己重写askappendfilenamefiledialog模块中缺少此功能。 enter image description here

2 个答案:

答案 0 :(得分:4)

asksaveasfilename对话框接受confirmoverwrite参数以启用或禁用文件存在检查。

file_name = asksaveasfilename(confirmoverwrite=False)

这可以在tk_getSaveFile的Tk手册中找到,但似乎没有为tkinter记录。它是在Tk 8.5.11中引入的,因此在Tk术语(2011年11月发布)中相对较新。

答案 1 :(得分:2)

在选择现有文件时,使用选项confirmoverwrite来阻止该消息。

import tkFileDialog 
import time
class Example():

    dlg = tkFileDialog.asksaveasfilename(confirmoverwrite=False)
    fname = dlg
    if fname != '':
        try:
            f = open(fname, "rw+")
            text = f.read()
            print text
        except:
            f = open(fname, "w")
        new_text = time.time()
        f.write(str(new_text)+'\n')
        f.close()      

修改:请注意,我使用f.read()来打印现有文字 您可能希望删除f.read()及后续print语句,并将其替换为f.seek(0,2),将指针放在现有文件的末尾。
另一个选项如下,使用打开文件中的append选项,如果文件尚不存在,将创建该文件:

import tkFileDialog 
import time
class Example():

    dlg = tkFileDialog.asksaveasfilename(confirmoverwrite=False)
    fname = dlg
    if fname != '':
        f = open(fname, "a")
        new_text = time.time()
        f.write(str(new_text)+'\n')
        f.close()      
相关问题