Я смотрю на эту маленькую тестовую программу уже несколько дней и не могу найти свое собственное решение. Программа просто переконфигурирует одну и ту же метку с другим текстом.
В классе Финал у меня есть эта строка
print (self.parent.grid_defaultdict)
и это говорит мне "
defaultdict (, {0:, ... ", который я знаю по этим меткам, которые находятся в" sheet "(class)," one_weekly_notebook (class) ", а затем в" final "(class).
Когда я пытаюсь изменить этот ярлык из родительского класса,
def display_schedule(self, button):
self.upper_tabs_dict["Final"].grid_defaultdict[0].configure(text = "John")
это говорит мне, что "AttributeError: 'Final' объект не имеет атрибута grid_defaultdict".
Поскольку я знаю, что мне нужен доступ к экземпляру из класса Final, чтобы добраться до меток, я продолжаю получать сообщение об ошибке атрибута. Пожалуйста, помогите мне решить эту проблему. Я уверен, что не правильно ссылаюсь на объект, но так как я смотрю на это несколько дней, кажется, я не могу уловить свою собственную ошибку. Заранее благодарны за Вашу помощь. Вот полный код:
import tkinter as tk
from tkinter import ttk
from collections import defaultdict
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("notbook my own try")
self.geometry("1200x650")
self.config(bg="tan")
self.style = ttk.Style()
self.lnb = Sheets(self)
class Sheets(ttk.Notebook):
def __init__(self, parent):
parent.style.configure("down.TNotebook", tabposition="sw")
super().__init__(parent, style = "down.TNotebook")
self.pack(fill = tk.BOTH, expand =1)
self.parent = parent
self.week_index = ['Week 1', ]
self.sheet_dict = {}
self.listbox_dict = {}
for num, week in enumerate(self.week_index, 1):
self.week = One_Weekly_Notebook(self, num)
self.week.pack()
self.add(self.week, text = week)
self.pack()
self.sheet_dict[week] = self.week
class One_Weekly_Notebook(ttk.Notebook):
def __init__(self, parent, index):
super().__init__(parent)
self.pack(fill = tk.BOTH, expand =1)
self.index = index
self.parent = parent
self.Week={}
self.upper_tabs_dict = {}
self.grid_defaultdict = defaultdict(list)
self.object_final = Final(self)
self.object_requests = Requests(self)
tab1 = self.object_final
tab2 = self.object_requests
tab1.pack()
tab2.pack()
self.add(tab1, text = "Final")
self.pack()
self.add(tab2, text = 'Requests')
self.pack()
self.upper_tabs_dict["Final"] = tab1
self.upper_tabs_dict["Requests"] = tab2
def display_results(self, button):
self.display_schedule(button)
def display_schedule(self, button):
self.upper_tabs_dict["Final"].label.configure(text = "J")
####--------------------Final Tab------------------------------####
class Final(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.pack(fill=tk.BOTH, expand=1)
self.parent = parent
self.Grid_Widget()
def Grid_Widget(self):
for i in range (7):
self.label = tk.Label(self, relief="ridge", width=11)
self.label.grid(row=0, column=i, sticky='nsew')
self.parent.grid_defaultdict[i] = self.label
self.parent.grid_defaultdict[0].configure(text = "Paul")
print (self.parent.grid_defaultdict)
self.buttons()
def buttons(self):
value = self.parent.index
self.button = tk.Button(self, text = "Caluculate")
self.button.configure(command= lambda button=value:
self.parent.display_results(button))
self.button.grid(row=10, column=8)
class Requests(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.pack(fill=tk.BOTH, expand=1)
self.parent = parent
self.Grid_Widget()
def Grid_Widget(self):
for i in range (7):
self.label = tk.Label(self, relief="ridge", width=11,)
self.label.grid(row=0, column=i, sticky='nsew')
self.parent.grid_defaultdict[i] = self.label
if __name__ == '__main__':
Application().mainloop()