【发布时间】:2015-10-23 05:28:48
【问题描述】:
我正在制作一个 Tkinter 文本编辑器,但在使用类时遇到了一些问题。我已经创建了一个包含我所有函数的类和一个包含我的主循环的类。根窗口可以正常打开,但是当按下保存按钮时出现错误
Exception in Tkinter callback
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1536, in __call__
return self.func(*args)
TypeError: unbound method saveas() must be called with F instance as first argument (got nothing instead)
我看过这个和这个例子,但不知道出了什么问题。 我的问题是什么?
以下是说明问题的简短代码。
from Tkinter import *
class Main(object):
def __init__(self, root):
root.title("PyText")
self.m1=Menu(root)
self.fm=Menu(self.m1, tearoff=0)
self.fm.add_command(label="New", command=self.saveas())
self.fm.add_command(label="Open", command=self.saveas())
self.fm.add_command(label="Save", command=self.saveas())
self.fm.add_command(label="Save as...", command=self.saveas())
self.fm.add_command(label="Close", command=self.saveas())
self.fm.add_separator()
self.fm.add_command(label="Exit", command=root.quit)
self.m1.add_cascade(label="File", menu=self.fm)
self.editmenu = Menu(self.m1, tearoff=0)
self.editmenu.add_command(label="Undo", command=self.saveas())
self.editmenu.add_separator()
self.editmenu.add_command(label="Cut", command=self.saveas())
self.editmenu.add_command(label="Copy", command=self.saveas())
self.editmenu.add_command(label="Paste", command=self.saveas())
self.editmenu.add_command(label="Delete", command=self.saveas())
self.editmenu.add_command(label="Select All", command=self.saveas())
self.m1.add_cascade(label="Edit", menu=self.editmenu)
self.helpmenu = Menu(self.m1, tearoff=0)
self.helpmenu.add_command(label="Help Index", command=self.saveas())
self.helpmenu.add_command(label="About...", command=self.saveas())
self.m1.add_cascade(label="Help", menu=self.helpmenu)
root.config(menu=self.m1)
self.t1=Text(root)
self.t1.config(width=90, height=40)
self.t1.grid()
def saveas(self):
self.filewin = Toplevel()
self.e1=Entry(self.filewin)
self.e1.grid()
self.button = Button(self.filewin, text="Save", command=self.save)
self.button.grid()
def save(self):
with open(self.e1.get(), "w") as f: # this instance variable can be accessed
f.write(self.t1.get('1.0', 'end')) # added self.t1 above, and start/end
root = Tk()
app = Main(root)
root.mainloop()
【问题讨论】: