2013-10-20 151 views
7

我在python中實現了一個基於GUI的文本編輯器。
我已經顯示了文本區域,但是當我嘗試在Tkinter中使用asksaveasfile方法時,它顯示文件已保存,但當我嘗試在桌面編輯器中打開相同文件時,它會給我一個空白文件。在Tkinter中保存文件對話框

只有該文件被創建並保存。它的內容不是。

我想知道爲什麼。難道我做錯了什麼?這是我的代碼:

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

回答

17

函數名稱是asksaveasfilename。它應該被認定爲tkFileDialog.asksaveasfilename。它不接受mode的說法。可能要使用tkFileDialog.asksaveasfile

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

它的工作原理。我認爲這是因爲括號,它不起作用。 –

+0

你剛剛創建了一個編輯說索引從1.0開始,但我的文本完美保存,即使我把開始索引爲0.0。 –

+4

@RohitShinde,可以將索引指定爲「(0.0,END)」來獲取整個文本,但是「(1.0,END)」對於指定方式是正確的。如果你想要第二行,你應該指定'2.x',而不是'1.x'。 – falsetru