2014-09-13 76 views
0

我是python的新手Tkinter.I创建了一个由文本框组成的代码。我有其他文件菜单按钮:File,Open,Save,Exit 问题:我不能即使在保存之后也要保存我的文本文件的内容,当点击打开按钮时我无法打开我的文件。Tkinter未打开并保存文本文件

编码:

from Tkinter import * 
import tkMessageBox 
import Tkinter 
import Tkinter as tki 
import tkFileDialog as th1 
import tkFileDialog 

class App(object): 

    def __init__(self,root): 
     Tkinter.Tk.__init__(self) 
     self.root = root 


    # create first Text label, widget and scrollbar 
     self.lbl1 = tki.Label(self, text="Type") 
     self.lbl1.grid(row=0,column=0,padx=2,pady=2) 

     self.txt1 = tki.Text(self, borderwidth=3, relief="sunken", height=4,width=55) 
     self.txt1.config(font=("consolas", 12), undo=True, wrap='word') 
     self.txt1.grid(row=0, column=1, sticky="nsew", padx=2, pady=2) 

     scrollb1 = tki.Scrollbar(txt_frm, command=self.txt1.yview) 
     scrollb1.grid(row=0, column=2, sticky='nsew') 
     self.txt1['yscrollcommand'] = scrollb1.set 
def open_file():         

     f=(tkFileDialog.askopenfilename(
      defaultextension = ".txt", 
      filetypes=[("All Types", ".*")])) 
     filename = f.name  
     return filename 
def file_save(): 
    f = th1.asksaveasfile(mode='w', defaultextension=".txt") 
    filename = f.name 
    return filename   
def Exit(): 
    exit()    

root = tki.Tk() 
menubar=Menu(root) 
root.configure(menu=menubar) 

filemenu=Menu(menubar,tearoff=0) 
menubar.add_cascade(label="File", menu=filemenu) 
filemenu.add_command(label="Save", command=file_save)   
filemenu.add_command(label='Open', command = open_file) 
filemenu.add_command(label='Exit', command = Exit) 
app = App(root) 
root.mainloop() 

请帮我解决我的代码的答案可以理解的!

回答

1

如果要进行文件操作,请改为使用askopenfileasksaveasfile

from Tkinter import * 
from tkFileDialog import askopenfile, asksaveasfile 

class App(object): 

    def __init__(self, root): 
     self.lbl1 = Label(root, text="Type") 
     self.lbl1.pack(side=LEFT) 

     self.txt1 = Text(root, borderwidth=3, relief="sunken", height=4, width=55) 
     self.txt1.config(font=("consolas", 12), undo=True, wrap='word') 
     self.txt1.pack(side=LEFT, expand=1, fill=BOTH) 

     scrollb1 = Scrollbar(root, command=self.txt1.yview) 
     scrollb1.pack(side=LEFT, fill=BOTH) 
     self.txt1['yscrollcommand'] = scrollb1.set 

    def open_file(self): 
     f = askopenfile(defaultextension=".txt", filetypes=[("All Types", ".*")]) 
     if not f: 
      return 
     self.txt1.delete(1.0, END) 
     self.txt1.insert(END, f.read()) 
     f.close() 

    def file_save(self): 
     f = asksaveasfile(mode='w', defaultextension=".txt") 
     if not f: 
      return 
     f.write(self.txt1.get(1.0, END)) 
     f.close() 

root = Tk() 
app = App(root) 
menubar = Menu(root) 
root.configure(menu=menubar) 

filemenu = Menu(menubar,tearoff=0) 
menubar.add_cascade(label="File", menu=filemenu) 
filemenu.add_command(label="Save", command=app.file_save) 
filemenu.add_command(label='Open', command=app.open_file) 
filemenu.add_command(label='Exit', command=root.quit) 
root.mainloop() 
+0

其不开放不是显示在stdout.By路径了我的意思,更多的享受的方法是,无论我在文本框中键入然后,它应该被保存之外的文件。 – 2014-09-13 16:29:27

+0

@adsqwqwe,查看更新后的答案。 – falsetru 2014-09-13 16:37:19

+0

现在它工作完美!谢谢 – 2014-09-13 16:41:28