我是Python的新手并且反对定向编程。如果我问一个愚蠢的问题,请原谅: 以下应该是一个简单的文本编辑器。我想在单独的类中使用textfield和菜单栏。当前的错误消息是:
File "Editor_play.py", line 19, in __init__
menubar = Menu(window)
RuntimeError: maximum recursion depth exceeded
我的问题:
self.text
?感谢您的期待。
from Tkinter import *
import tkFileDialog
class Textfield(object):
def __init__(self, window):
self.window = window
window.title("text editor")
self.scrollbar = Scrollbar(window)
self.scrollbar.pack(side="right",fill="y")
self.text = Text(window,yscrollcommand=self.scrollbar.set)
self.scrollbar.config(command=self.text.yview)
self.text.pack()
window.mainloop()
class Menu(object):
def __init__(self, window):
self.window = window
menubar = Menu(window)
filemenu = Menu(menubar)
filemenu.add_command(label="load",command=self.load)
filemenu.add_command(label="save as",command=self.saveas)
menubar.add_cascade(label="file",menu=filemenu)
window.config(menu=menubar)
def load(self):
self.file = tkFileDialog.askopenfile()
self.text.delete(1.0, END)
if self.file:
self.text.insert(1.0, self.file.read())
def saveas(self):
self.file = tkFileDialog.asksaveasfile()
if self.file:
self.file.write(self.text.get(1.0, END))
window = Tk()
textfield = Textfield(window)
menu = Menu(window)
现在它看起来像这样但它仍然不对。
菜单类的原因是我想了解它的工作原理。因为我可以有另一个具有相同菜单的应用程序然后我将菜单类放入一个模块。
在我学习如何使用python进行编程的过程中,对这两个示例类之间的交互的理解对我来说似乎是一个里程碑。我明白了,我可以继续。我之前在另一篇文章中询问我是否可以在构造(进入类)时犯错或创建死胡同。答案是:一切皆有可能,没有限制。现在我想将此应用于此示例。请帮忙。
当前错误消息是:
"""
Traceback (most recent call last):
File "Editor_play.py", line 41, in <module>
menu = Menubar(window, textfield.text)
File "Editor_play.py", line 20, in __init__
menubar = Menu(window)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2580, in __init__
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1974, in __init__
_tkinter.TclError: this isn't a Tk applicationNULL main window
"""
from Tkinter import *
import tkFileDialog
class Textfield(object):
def __init__(self, window):
self.window = window
window.title("text editor")
self.scrollbar = Scrollbar(window)
self.scrollbar.pack(side="right",fill="y")
self.text = Text(window,yscrollcommand=self.scrollbar.set)
self.scrollbar.config(command=self.text.yview)
self.text.pack()
window.mainloop()
class Menubar(object):
def __init__(self, window, text):
self.window = window
self.text = text
menubar = Menu(window)
filemenu = Menu(menubar)
filemenu.add_command(label="load",command=self.load)
filemenu.add_command(label="save as",command=self.saveas)
menubar.add_cascade(label="file",menu=filemenu)
window.config(menu=menubar)
def load(self):
self.file = tkFileDialog.askopenfile()
self.text.delete(1.0, END)
if self.file:
self.text.insert(1.0, self.file.read())
def saveas(self):
self.file = tkFileDialog.asksaveasfile()
if self.file:
self.file.write(self.text.get(1.0, END))
window = Tk()
textfield = Textfield(window)
menu = Menubar(window, textfield.text)
答案 0 :(得分:1)
您的Menu
班级会覆盖Tkinter
菜单类。将其重命名为其他内容,您将不会遇到此问题。
让菜单了解Textfield
的方法是将Textfield
实例作为参数传递给菜单类构造函数。更好的是,如果你所做的只是编写一个简单的文本编辑器,那么你就不需要为Menu
和Textfield
创建单独的类。你可以只有一个“app”类,它继承根对象。