Python文本编辑器(非常基本)

时间:2016-01-04 06:41:37

标签: python-2.7 tkinter

我是使用Tkinter的初学者。

我正在尝试制作python文本编辑器

此编辑器有选项

1.new file

2.open file

3.save

4.save as

5.exit

但我的3.save选项无效。

它正在显示......错误

Exception in Tkinter callback

Traceback (most recent call last):

File "C:\Python27\lib\lib-tk\Tkinter.py", line 1536, in __call__

return self.func(*args)

File "C:\Users\Shalom Alexander\Desktop\files\Sharon 's 

database\sdf_lab_by_sharon\Assignment on c and python\python assinment 

ans\mytxt2.py", line 44, in savefile

f=open(filename,'w')

TypeError: coercing to Unicode: need string or buffer, NoneType found

以下是我的代码,我正在使用python 2.7.10

from Tkinter import *
from tkFileDialog import *

filename=None

class Window(Frame):
    def __init__(self,master=None):
        Frame.__init__(self,master)

        self.master=master


        self.init_window()


    def init_window(self):

        self.master.title('Death note 2')

        self.pack(fill=BOTH,expand=1)

        menubar=Menu(self.master)
        self.master.config(menu=menubar)

        File=Menu(menubar)
        File.add_command(label='New',command=self.newfile)
        File.add_command(label='Open',command=self.openfile)
        File.add_command(label='Save',command=self.savefile)
        File.add_command(label='Save as',command=self.saveasfile)
        File.add_separator()
        File.add_command(label='Exit',command=self.my_exit)
        menubar.add_cascade(label='File',menu=File)

    def newfile(self):

        global filename
        filename="Untitled.txt"
        text.delete(0.0,END)

    def savefile(self):
        global filename
        f=open(filename,'w')
        t=text.get(0.0,END)
        f.write(t)
        f.close()

    def saveasfile(self):

        f=asksaveasfile(mode='w')
        t=text.get(0.0,END)

        try:
            f.write(t.rstrip())
        except:
            showerror(title='Oops',message='Sorry can\'t save the file')
    def openfile(self):

        f=askopenfile(mode='r')
        t=f.read()
        text.delete(0.0,END)
        text.insert(0.0,t)

    def my_exit(self):
        exit()

root=Tk()
text=Text(root,width=500,height=500)
text.pack()
root.geometry('500x500')
My_txt_edt=Window(root)
root.mainloop()

2 个答案:

答案 0 :(得分:2)

错误非常明确:

TypeError: coercing to Unicode: need string or buffer, NoneType found

更具体地说," NoneType" found表示open方法需要一个unicode字符串,但你递给它None

看起来你正在寻找一个代码路径,其中没有设置全局filename变量(顺便使用全局的可怕选择)。我不打算为你调试,但这应该给你一个正确方向的指针。它只是代码中的一个错误,而不是Tkinter或解释器的问题。

答案 1 :(得分:1)

当您点击“保存”按钮(点击新按钮之前)时{1}} 看这个:

filename=None

您可以使用此功能保存:

>>> open(None, 'w')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: coercing to Unicode: need string or buffer, NoneType found
>>> 

如果要在保存后设置默认值def savefile(self): global filename if filename: f=open(filename,'w') t=text.get(0.0,END) f.write(t) f.close() else: f=asksaveasfile(mode='w',defaultextension=".txt") if f: text2save=text.get(0.0,END) f.write(text2save) f.close() ,请将保存功能替换为:

filename