我對Python和麪向對象編程非常陌生。所以請原諒,如果我問一個愚蠢的問題: 下面應該是一個簡單的文本編輯器。我想要將文本框和菜單欄放在單獨的類中。當前的錯誤消息是:兩個類的交互,python
File "Editor_play.py", line 19, in __init__
menubar = Menu(window)
RuntimeError: maximum recursion depth exceeded
我的問題:
- 我必須打電話給文本字段的對象和菜單的目標和我一樣,或者我應該調用對象文本字段,並紛紛致電Textfield內的菜單?
- 如何在Textfield中獲得關於
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)
在'Menu'中你引用'self.text',但是你沒有在那裏定義它。 – 2013-05-01 20:55:26
您的'Menu'類創建一個* Menu *的* new *實例,然後創建一個新的'Menu'實例,並且無限。那麼,至少在RecursionError之前。什麼是嵌套'菜單'對象應該做的? – 2013-05-01 20:59:38