Почему я не вижу свой лейбл из другого класса? - PullRequest
1 голос
/ 23 июня 2019

Я смотрю на эту маленькую тестовую программу уже несколько дней и не могу найти свое собственное решение. Программа просто переконфигурирует одну и ту же метку с другим текстом.

В классе Финал у меня есть эта строка

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()
...