我的程序由3個類組成。整個程序在MainWindow類中運行。 MainWindow類首先初始化自身,接着是self.menubar對象。下一個對象是我給名爲self.journal的文本框。當使用多個對象時,在tkinter Python中查找屬性屬於哪個對象
一旦程序運行,我嘗試訪問open_file
方法MainWindow
,這是通過訪問filemenu
方法Menubar
完成的。當我嘗試打開文本文件時出現以下錯誤:AttributeError: 'Menubar' object has no attribute 'journal'
發生此問題。
我試圖用MainWindow.journal
和TextBox.journal
代替self.journal
,它似乎不起作用。
class MainWindow(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
''''''
''''''
self.menubar = Menubar(self) # instantaiated Menubar object
'''''
'''''
self.journal = TextBox(self.frame, name='Journal')
'''''
'''''
def open_file(self):
filename = MainWindow.getFileNameOpen(self)
if filename == '': # No file chosen
filename = None
else:
self.MainWindow.journal.delete(1.0, END) # This line is the problem
fh = open(filename, 'r')
textFromFile = fh.read().rstrip()
self.MainWindow.journal.insert(1.0, textFromFile)
fh.close()
class Menubar:
def __init__(self, parent):
self.menubar = tk.Menu(parent)
self.fileMenu(self.menubar)
def fileMenu(self, parent):
filemenu = tk.Menu(parent, tearoff=0)
filemenu.add_command(label='Open', accelerator='Ctrl+O', underline=0, command=lambda: MainWindow.open_file(self))
class TextBox(tk.Text):
def __init__(self, parent, name='', *args, **kwargs):
tk.Label(master=parent, text=name).pack()
tk.Text.__init__(self, master=parent, *args, **kwargs)
self.text.pack()
我強調了引起我這個問題的線。它是根據def open_file(self)
方法
'Main'是什麼,你爲什麼使用全局? –
對不起,我現在編輯它。 Main應該是MainWindow並且我已經刪除了全局文件 – firebird92
您能否更新open_file函數的完整代碼,這會導致問題 –