Erro de atributo ao chamar a variável de superclasse na subclasse tkinter python

0
Voto

Python Eu sou bastante novo em Programação Orientada a Objetos. Estou tentando obter o código a seguir usando o pacote tkinter. No entanto, estou lutando para acessar a variável self.coord da superclasse (FirstFrame) para a subclasse (ThirdFrame).

PythonPython Eu sou bastante novo em Programação Orientada a Objetos. Estou tentando obter o código a seguir usando o pacote tkinter. No entanto, estou lutando para acessar a variável self.coord da superclasse (FirstFrame) para a subclasse (ThirdFrame).
import tkinter as tk

class MainFrame(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **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, column=0, sticky="nsew")
        frame.grid_propagate(0)

        frame1=ThirdFrame(container, self)
        self.frames[ThirdFrame]=frame1
        frame1.grid(row=1, column=0, 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, parent, height='200', width='200', bg='green')
        self.coord=[1, 3, 5, 7, 9]
        lbl=tk.Label(text="You did It!")
        lbl.grid(row=0, column=0, sticky='n')

class ThirdFrame(FirstFrame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent, height='500', width='100', bg='yellow')
        print("Success", self.coord)

app=MainFrame()
app.mainloop()
import tkinter as tk class MainFrame(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **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, column=0, sticky="nsew") frame.grid_propagate(0) frame1=ThirdFrame(container, self) self.frames[ThirdFrame]=frame1 frame1.grid(row=1, column=0, 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, parent, height='200', width='200', bg='green') self.coord=[1, 3, 5, 7, 9] lbl=tk.Label(text="You did It!") lbl.grid(row=0, column=0, sticky='n') class ThirdFrame(FirstFrame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent, height='500', width='100', bg='yellow') print("Success", self.coord) app=MainFrame() app.mainloop() importar tkinter como tk classe MainFrame (tk.Tk): def __init __ (self, * args, ** kwargs): tk.Tk .__ init __ (self, * args, ** kwargs) container=tk.Frame (self) container.grid (row=0, column=0, sticky="nsew") container.grid_rowconfigure (0, peso=1) container.grid_columnconfigure (0, peso=1) self.frames={} frame=FirstFrame (container, self) self.frames[FirstFrame]=frame frame.grid (linha=0, coluna=0, pegajoso="nsew") frame.grid_propagate (0) frame1=ThirdFrame (container, self) self.frames[ThirdFrame]=frame1 frame1.grid (linha=1, coluna=0, aderente="w") self.show_frames (FirstFrame) self.show_frames (ThirdFrame) def show_frames (self, cont): frame=self.frames[cont] frame.tkraise () classe FirstFrame (tk.Frame): def __init __ (self, parent, controller): tk.Frame .__ init __ (self, parent, height='200', width='200', bg='green') self.coord=[1, 3, 5, 7, 9] lbl=tk.Label (text="Você conseguiu!") lbl.grid (linha=0, coluna=0, aderente='n') classe ThirdFrame (FirstFrame): def __init __ (self, parent, controller): tk.Frame .__ init __ (self, parent, height='500', width='100', bg='yellow') imprimir ("Sucesso", self.coord) app=MainFrame () app.mainloop ()

O seguinte Erro de Atributo ocorre quando o programa é executado.

O seguinte Erro de Atributo ocorre quando o programa é executado.
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'
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' C: \Users \lenovo \venv \Scripts \python.exe C: /Users/lenovo/IdeaProjects/Trial/tryyyrr.py Traceback (última chamada mais recente): Arquivo"C: /Users/lenovo/IdeaProjects/Trial/tryyyrr.py", linha 48, em app=MainFrame () Arquivo"C: /Users/lenovo/IdeaProjects/Trial/tryyyrr.py", linha 22, em __init__ frame1=ThirdFrame (container, self) Arquivo"C: /Users/lenovo/IdeaProjects/Trial/tryyyrr.py", linha 45, em __init__ imprimir ("Sucesso", self.coord) AttributeError: o objeto 'ThirdFrame' não tem atributo 'coord'

Algumas orientações serão realmente úteis.

Algumas orientações serão realmente úteis.

Fonte

python tkinter attributeerror

-Carles

-Wups

-Disha Jaisingpure

1 Responda
1
Voto

Você chamou a superclasse errada dentro do ThirdFrame.__init__(). Deve ser como abaixo:

class ThirdFrame(FirstFrame):
    def __init__(self, parent, controller):
        #tk.Frame.__init__(self, parent, height='500', width='100', bg='yellow')
        FirstFrame.__init__(self, parent, controller)
        self.config(height=500, width=100, bg='yellow')
        print("Success", self.coord)
Fonte

Você pode interessar

© 2021   OlaMundo.Org