Изменение текста tk.label из функции в классе - PullRequest
0 голосов
/ 27 января 2020

Получение ошибки «AttributeError: у объекта« MainPage »нет атрибута« deftext1 »». Разве я не определяю deftext1 при его первоначальном создании?

Я должен добавить, что я новичок, поэтому извиняюсь, если что-то (или все это) выглядит беспорядочно.

 import tkinter as tk

 class example(tk.Tk):

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

         tk.Tk.__init__(self, *args, **kwargs)

         tk.Tk.wm_title(self, "Example")
         tk.Tk.wm_geometry(self, '800x600')

         container = tk.Frame(self)
         container.pack(side="top", fill="both", expand = True)

         container.grid_rowconfigure(0, weight=1)
         container.grid_columnconfigure(0, weight=1)

         self.frames = {}

         frame = MainPage(container, self)
         self.frames[MainPage] = frame
         frame.grid(row=0, column=0, sticky="nsew")

         self.show_frame(MainPage)

     def show_frame(self, cont):

         frame = self.frames[cont]
         frame.tkraise()

 class MainPage(tk.Frame):

     def __init__(self, parent, controller):
         tk.Frame.__init__(self, parent)

         deftext1 = tk.Label(self, text="Text to change", font=("Arial Bold", 20))
         deftext1.pack(pady=10,padx=10)

         button1 = tk.Button(self, text="Load",
                     command=lambda: self.updateLists())
         button1.pack(pady=10,padx=10)

     def updateLists(self):
         self.deftext1.config(text='It Worked')

 app=example() app.mainloop() 

1 Ответ

0 голосов
/ 29 января 2020

Переменная deftext1 является локальной переменной, она не является атрибутом класса

Измените deftext1 на self.deftext1, чтобы она стала атрибутом класса.

Ваш код:

import tkinter as tk

 class example(tk.Tk):

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

         tk.Tk.__init__(self, *args, **kwargs)

         tk.Tk.wm_title(self, "Example")
         tk.Tk.wm_geometry(self, '800x600')

         container = tk.Frame(self)
         container.pack(side="top", fill="both", expand = True)

         container.grid_rowconfigure(0, weight=1)
         container.grid_columnconfigure(0, weight=1)

         self.frames = {}

         frame = MainPage(container, self)
         self.frames[MainPage] = frame
         frame.grid(row=0, column=0, sticky="nsew")

         self.show_frame(MainPage)

     def show_frame(self, cont):

         frame = self.frames[cont]
         frame.tkraise()

 class MainPage(tk.Frame):

     def __init__(self, parent, controller):
         tk.Frame.__init__(self, parent)

         self.deftext1 = tk.Label(self, text="Text to change", font=("Arial Bold", 20))
         self.deftext1.pack(pady=10,padx=10)

         button1 = tk.Button(self, text="Load",
                     command=lambda: self.updateLists())
         button1.pack(pady=10,padx=10)

     def updateLists(self):
         self.deftext1.config(text='It Worked')

 app=example()
 app.mainloop() 

Я НАДЕЖДА все заработало.

...