如何解决在子类tkinter python中调用超类变量时出现属性错误
Python 我对面向对象编程还是相当陌生的。我正在尝试使用tkinter包实现以下代码。但是,我正在努力从超类(FirstFrame)到子类(ThirdFrame)访问self.coord变量。
import tkinter as tk
class MainFrame(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self,**kwargs)
container = tk.Frame(self)
container.grid(row=0,column=0,sticky="nsew")
container.grid_rowconfigure(0,weight=1)
container.grid_columnconfigure(0,weight=1)
self.frames = {}
frame = FirstFrame(container,self)
self.frames[FirstFrame] = frame
frame.grid(row=0,sticky="nsew")
frame.grid_propagate(0)
frame1 = ThirdFrame(container,self)
self.frames[ThirdFrame] = frame1
frame1.grid(row=1,sticky="w")
self.show_frames(FirstFrame)
self.show_frames(ThirdFrame)
def show_frames(self,cont):
frame = self.frames[cont]
frame.tkraise()
class FirstFrame(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,height='200',width='200',bg='green')
self.coord = [1,3,5,7,9]
lbl = tk.Label(text="You did It!")
lbl.grid(row=0,sticky='n')
class ThirdFrame(FirstFrame):
def __init__(self,height='500',width='100',bg='yellow')
print("Success",self.coord)
app = MainFrame()
app.mainloop()
C:\Users\lenovo\venv\Scripts\python.exe C:/Users/lenovo/IdeaProjects/Trial/tryyyrr.py
Traceback (most recent call last):
File "C:/Users/lenovo/IdeaProjects/Trial/tryyyrr.py",line 48,in <module>
app = MainFrame()
File "C:/Users/lenovo/IdeaProjects/Trial/tryyyrr.py",line 22,in __init__
frame1 = ThirdFrame(container,self)
File "C:/Users/lenovo/IdeaProjects/Trial/tryyyrr.py",line 45,in __init__
print("Success",self.coord)
AttributeError: 'ThirdFrame' object has no attribute 'coord'
一些指导确实会有所帮助。
解决方法
您在ThirdFrame.__init__()
中调用了错误的超类。它应该如下所示:
class ThirdFrame(FirstFrame):
def __init__(self,parent,controller):
#tk.Frame.__init__(self,height='500',width='100',bg='yellow')
FirstFrame.__init__(self,controller)
self.config(height=500,width=100,bg='yellow')
print("Success",self.coord)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。