2013-10-20 7 views
7

में फ़ाइल संवाद सहेजें मैं पाइथन में एक जीयूआई आधारित टेक्स्ट एडिटर लागू कर रहा हूं।
मैंने टेक्स्ट क्षेत्र प्रदर्शित किया है, लेकिन जब मैं टिंकर में askaveasfile विधि का उपयोग करने का प्रयास करता हूं, तो यह दिखाता है कि फ़ाइल सहेजी गई है, लेकिन जब मैं अपने डेस्कटॉप संपादक में एक ही फ़ाइल को खोलने और खोलने के लिए, तो यह मुझे एक खाली फ़ाइल देता है।टिंकर

केवल, फ़ाइल बनाई और सहेजी गई है। इसकी सामग्री नहीं है।

मैं जानना चाहता हूं क्यों। क्या मुझसे कुछ गलत हो रही है? यहां मेरा कोड है:

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

संबंधित मुद्दे