как сделать петли виджетов с 2-мя независимыми ноутбуками? - PullRequest
0 голосов
/ 23 декабря 2018

Виджет метки отображается только на последней нижней вкладке, а не на всех нижних вкладках.

У меня есть 2 независимых блокнота, и я учусь размещать определенные виджеты на верхних вкладках во всех нижних вкладках.Я думаю, что проблема происходит здесь.

def button_display_function(self,):
    for name in self.parent.lower_tabs:
        for name in self.parent.upper_tabs[:1]:


import tkinter as tk
from tkinter import ttk
from functools import partial


class Application(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("class basic window")
        self.config(background="LightBlue4")

        self.Days= ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

        self.lower_tabs = ["Week 1", "Week 2"]
        self.lower_tabs_dict = {}

        self.upper_tabs = ["Final", "Requests", "Control"]
        self.upper_tabs_dict = {}         
        self.buttons_dict = {}

        self.create_lower_tabs()
        for name in self.lower_tabs:
            self.create_upper_tabs(name) #looping to place grid into all the upper tabs

            for name in self.upper_tabs[:2]: #["Final", "Requests"]
                self.create_grid(name)

        self.week1 = Week(self)
        self.week1.pack()

    def create_lower_tabs(self):
        style1 = ttk.Style()
        style1.configure("down.TNotebook", tabposition="sw")
        self.tab_control_lower = ttk.Notebook(self, width=1200, height=550, padding=0, style="down.TNotebook")
        for name in self.lower_tabs:
            self.lower_tabs_dict[name] = tk.Frame(self.tab_control_lower, bg='old lace')
            self.tab_control_lower.add(self.lower_tabs_dict[name], text=name)
        self.tab_control_lower.pack(fill=tk.BOTH, expand=1)


    def create_upper_tabs(self, name):
        self.tabControl_upper = ttk.Notebook(self.lower_tabs_dict[name], width=1100, height=300, padding = 0) #create upper notebook and its name
        for name in self.upper_tabs:
            self.tab=tk.Frame(self.tabControl_upper, bg='thistle') # each tab sits in a frame widget
            self.tabControl_upper.add(self.tab, text=name)
            self.upper_tabs_dict[name] = self.tab #add the tab widgets to the dict.
            self.tabControl_upper.pack(fill=tk.BOTH, expand=1)

    ####----------create base label grids--------------####
    def create_grid(self, name):
        for i in range (9):
            for day in range(len(self.Days)+2):
                self.label = tk.Label(self.upper_tabs_dict[name], relief="ridge", width=11, height=3)
                self.label.grid(row=i, column=day, sticky='nsew')

    def add_weekday_names(self, name):
        #------add in the weekday name labels------------------
        i=2
        for day in self.Days:
            self.label=tk.Label(self.upper_tabs_dict[name], text=day,  fg="red", bg="snow")
            self.label.grid(row=0, column=i)
            self.labeldays_dict[day]=self.label
            i +=1

class Week(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.button_display_function()

    ####-------widgets-----------------

    def button_display_function(self):
        for name in self.parent.lower_tabs:
            for name in self.parent.upper_tabs[:1]:
                self.button = tk.Button(self.parent.upper_tabs_dict[name], text="Calculate", fg="salmon")
                self.button.grid(row=10, column=8, sticky='e')

if __name__ == '__main__':
    Application().mainloop()

Кнопка «Рассчитать» должна отображаться как Неделя 1 и Неделя 2 's'Финальная "вкладка.Теперь он отображается только на вкладке "Неделя 2".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...