在子类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'

一些指导确实会有所帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)