2013-10-20 8 views
7

Ich implementiere einen GUI-basierten Texteditor in Python.
Ich habe den Textbereich angezeigt, aber wenn ich versuche, die asksaveasfile-Methode in Tkinter zu verwenden, zeigt es, dass die Datei gespeichert wurde, aber wenn ich versuche, die gleiche Datei in meinem Desktop-Editor zu öffnen, gibt es mir eine leere Datei.Datei speichern Dialog in Tkinter

Nur die Datei wird erstellt und gespeichert. Sein Inhalt ist nicht.

Ich würde gerne wissen, warum. Mache ich etwas falsch? Hier ist mein Code:

from Tkinter import * 
import tkMessageBox 
import Tkinter 
import tkFileDialog 

def donothing(): 
    print "a" 

def file_save(): 
    name=asksaveasfile(mode='w',defaultextension=".txt") 
    text2save=str(text.get(0.0,END)) 
    name.write(text2save) 
    name.close 

root = Tk() 
root.geometry("500x500") 
menubar=Menu(root) 
text=Text(root) 
text.pack() 
filemenu=Menu(menubar,tearoff=0) 
filemenu.add_command(label="New", command=donothing) 
filemenu.add_command(label="Open", command=donothing) 
filemenu.add_command(label="Save", command=file_save) 
filemenu.add_command(label="Save as...", command=donothing) 
filemenu.add_command(label="Close", command=donothing) 
filemenu.add_separator() 
filemenu.add_command(label="Exit", command=root.quit) 
menubar.add_cascade(label="File", menu=filemenu) 

editmenu=Menu(menubar,tearoff=0) 
editmenu.add_command(label="Undo", command=donothing) 
editmenu.add_command(label="Copy", command=donothing) 
editmenu.add_command(label="Paste", command=donothing) 
menubar.add_cascade(label="Edit", menu=editmenu) 

helpmenu=Menu(menubar,tearoff=0) 
helpmenu.add_command(label="Help",command=donothing) 
menubar.add_cascade(label="Help",menu=helpmenu) 

root.config(menu=menubar) 
root.mainloop() 

Antwort

17

Der Funktionsname ist asksaveasfilename. Und es sollte als tkFileDialog.asksaveasfilename qualifiziert werden. Und es akzeptiert kein mode Argument.

Vielleicht möchten Sie tkFileDialog.asksaveasfile verwenden.

def file_save(): 
    f = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt") 
    if f is None: # asksaveasfile return `None` if dialog closed with "cancel". 
     return 
    text2save = str(text.get(1.0, END)) # starts from `1.0`, not `0.0` 
    f.write(text2save) 
    f.close() # `()` was missing. 
+0

Es funktioniert. Ich denke, es war wegen der Klammer, dass es nicht funktionierte. –

+0

Sie haben gerade eine Änderung erstellt, die besagt, dass die Indizierung bei 1.0 beginnt, aber mein Text wird perfekt gespeichert, auch wenn ich den Startindex auf 0.0 setze. –

+4

@RohitShinde, Es ist okay, den Index als '(0.0, END) anzugeben, um den gesamten Text zu erhalten, aber' (1.0, END) 'ist korrekt, um anzugeben. Wenn Sie die zweite Zeile möchten, sollten Sie '2.x', nicht' 1.x' angeben. – falsetru

Verwandte Themen