2013-10-20 28 views
7

Python'da GUI tabanlı bir metin düzenleyicisi uyguluyor.
Metin alanını görüntüledim ancak Tkinter'daki asksaveasfile yöntemini kullanmaya çalıştığımda, dosyanın kaydedildiğini ancak aynı dosyayı masaüstüm düzenleyicide açmaya çalıştığımda boş bir dosya verdiğini gösteriyor.Dosya Kaydet iletişimini Tkinter

Sadece dosya oluşturulur ve kaydedilir. İçeriği değildir.

Nedenini bilmek isterim. Yanlış bir şey mi yapıyorum? İşte benim kodum:

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

cevap

17

İşlev adı asksaveasfilename'dur. Ve tkFileDialog.asksaveasfilename olarak nitelendirilmelidir. Ve mode argümanını kabul etmiyor.

Belki de tkFileDialog.asksaveasfile numaralı telefonu kullanmak istiyorsunuz.

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

Çalışıyor. Bunun çalışmadığı parantez nedeniyle olduğunu düşünüyorum. –

+0

Dizinleştirmenin 1.0'dan başladığını söyleyen bir düzenleme oluşturdunuz, ancak başlangıç ​​endeksini 0,0 olarak ayarlansa bile metnim mükemmel şekilde kaydediliyor. –

+4

@RohitShinde, Dizini tüm metni almak için '(0.0, END) olarak belirtmek yeterlidir, ancak' (1.0, END) 'belirtmek için doğrudur. İkinci satırı istiyorsanız, '2.x' değil,' 1.x' belirtmelisiniz. – falsetru