我是使用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
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()
答案 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