Tkinter неправильный вывод Label

Писал простенькую программу для составления расписания и задержался на выводе объектов Label LabalFrame создается на втором окне, но когда я пытаюсь создать Label в нем, он создается на 1 окне. Как это исправить?

from tkinter import messagebox
#---------------------------------------Функции кнопок---------------------------------------------- 
def btn_click():
    global sch
    number = numberEntry.get()
    subject = subjectEntry.get()
    output = f'Под номером {number} записан предмет {subject}'
    if number == '' and subject != '':
        messagebox.showerror(title='Ошибка', message='Вы не ввели номер предмета!')
    elif subject == '' and number != '':
        messagebox.showerror(title='Ошибка', message='Вы не ввели название предмета!')
    elif subject == '' and number == '':
        messagebox.showerror(title='Ошибка', message='Вы не ввели номер и название предмета!')
    else:
        messagebox.showinfo(title='Операция завершена', message=output)
        sch[0][int(number)] = subject

def schedule_btn():
    global sch
    if sch != [['<пусто>'] * 8] * 6:
        show_schedule()
    else:
        messagebox.showerror(title='Ошибка', message='Список предметов пуст!!')
        
#---------------------------------------Конфиг второго окна----------------------------------------------         
        
def show_schedule():
    global sch
    Schedule = Toplevel(Main_window)
    Schedule.geometry('700x500+200+200')
    Schedule.title('Расписание')
    
    monday = LabelFrame(Schedule, bg='gray', text='Понедельник').pack(ipadx=10, ipady=10, expand=1, fill=BOTH, side=LEFT)
    tuesday = LabelFrame(Schedule, bg='gray', text='Вторник').pack(ipadx=10, ipady=10, expand=1, fill=BOTH, side=LEFT)
    wednesday = LabelFrame(Schedule, bg='gray', text='Среда').pack(ipadx=10, ipady=10, expand=1, fill=BOTH, side=LEFT)
    thursday = LabelFrame(Schedule, bg='gray', text='Четверг').pack(ipadx=10, ipady=10, expand=1, fill=BOTH, side=LEFT)
    friday = LabelFrame(Schedule, bg='gray', text='Пятница').pack(ipadx=10, ipady=10, expand=1, fill=BOTH, side=LEFT)
    saturday = LabelFrame(Schedule, bg='gray', text='Суббота').pack(ipadx=10, ipady=10, expand=1, fill=BOTH, side=LEFT)

    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][0]}').pack(side=TOP)
    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][1]}').pack(side=TOP)
    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][2]}').pack(side=TOP)
    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][3]}').pack(side=TOP)
    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][4]}').pack(side=TOP)
    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][5]}').pack(side=TOP)
    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][6]}').pack(side=TOP)
    Label(monday, width=30, height=2, bg='red', text=f'{sch[0][7]}').pack(side=TOP)

    
    
    Schedule.mainloop()
#---------------------------------------Списки---------------------------------------------- 

sch = [['<пусто>'] * 8] * 6

#---------------------------------------Конфиг главного окна----------------------------------------------  

Main_window = Tk()
Main_window.geometry('800x600+200+200')
Main_window.title('Составитель расписания')
Label(Main_window, text='Введите номер урока').pack()
numberEntry = Entry(Main_window, bg = 'white')
numberEntry.pack()
Label(Main_window, text='Введите предмет').pack()
subjectEntry = Entry(Main_window, bg = 'white')
subjectEntry.pack()
Button(Main_window, text='Отправить', bg='darkgray', relief=GROOVE, bd=8, command=btn_click).pack()  
Button(Main_window, text='Показать текущее расписание', bg='darkgray', relief=GROOVE, bd=8, command=schedule_btn).pack(anchor=SE)


Main_window.mainloop()```

Ответы (1 шт):

Автор решения: Сергей Кох

Если вы хотите давать имя создаваемым виджетам и размещать их в одной строке, то это можно сделать применив моржовый оператор:

(monday := LabelFrame(Schedule, bg='gray', text='Понедельник')).pack(ipadx=10, ipady=10, expand=1, fill=BOTH, side=LEFT)

А так как у вас monday is None, то ткинтер думает, что вы хотите разместить все Label в окне по умолчанию, то есть в главном. И еще Schedule.mainloop() не нужен, основной цикл один на всё приложение.

→ Ссылка