2013-10-20 20 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行目が必要な場合は、 '1.x'ではなく' 2.x'を指定してください。 – falsetru

関連する問題