Jal
Jal

Reputation: 215

Get a file name with tkinter.filedialog.asksaveasfilename to append in it

from an GUI application designed with tkinter, I wish to save some datas in a file in appending mode. To get the file's name I use asksaveasfilename from filedialog module. Here is the code:

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()

The problem happens when I select in the dialog an existing file, I got a warning that the file will be overwritten. It is not true since I append in the file. Is there a way to get rid of this warning ? Or do I have to rewrite a askappendfilename myself ? This is missing in filedialog module. enter image description here

Upvotes: 4

Views: 21770

Answers (2)

Rolf of Saxony
Rolf of Saxony

Reputation: 22438

Use the option confirmoverwrite to prevent the message, when selecting an existing file.

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()      

Edit: Note that I am using f.read() to be able to print the existing text.
You may want to remove the f.read() and subsequent print statement and replace them with a f.seek(0,2) which positions the pointer at the end of the existing file.
The other option is as follows using the append option in the file open, which will create the file if it doesn't already exist:

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()      

Upvotes: 3

patthoyts
patthoyts

Reputation: 33223

The asksaveasfilename dialog accepts a confirmoverwrite argument to enable or disable the file existence check.

file_name = asksaveasfilename(confirmoverwrite=False)

This can be found in the Tk manual for tk_getSaveFile but doesn't appear to be documented for tkinter. It was introduced in Tk 8.5.11 so is relatively new in Tk terms (released Nov 2011).

Upvotes: 5

Related Questions