Python - Tkinter - Виджеты, созданные внутри класса, унаследованного от Toplevel (), появляются в другом фрейме. Вне класса класс Toplevel () пуст

Я пытаюсь создать класс и наследовать отToplevel() так что элементы GUI класса могут содержаться в отдельном окне. Обычно я бы просто наследовал отFrame() но для моей цели мне нужно, чтобы все было в окне. Я'Я пишу код в своем скрипте GUI-шаблона, чтобы я мог понять, как заставить его работать, прежде чем вставлять его в тот скрипт, в котором я хочу его использовать. Вот код:

from Tkinter import *
import socket

myplayername = ''

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()

        class InfoLabel(Frame):
            def __init__(self, name, value, bgc, nfgc, vfgc, master=None):
                Frame.__init__(self, master)
                self.pack()
                Label(master=self, text=name, bg=bgc, fg=nfgc).pack({"side": "left"})
                Label(master=self, text=value, bg=bgc, fg=vfgc).pack({"side": "left"})

        class LabelEntry(Frame):
            def __init__(self, name, variable, bgc, fgc, entrysize, master=None):
                Frame.__init__(self, master)
                self.pack()
                Label(master=self, text=name, bg=bgc, fg=fgc).pack({"side": "left"})
                Entry(master=self, textvariable=variable, bg=bgc).pack({"side": "left"})

        class HostGameWindow(Toplevel):
            def __init__(self):
                global myplayername
                Toplevel.__init__(self)
                self.title('Host a Game')
                hostname = socket.gethostname()
                hostipaddr = socket.gethostbyname(hostname)
                hostport = 11489
                players = 0

                portsv = StringVar(value=str(hostport))
                numofplayers = StringVar(value=str(players))
                myname = StringVar(value=myplayername)

                hostgameframe = Frame(master=self, bg='#999', bd=3, relief=RIDGE, padx=5, pady=5).pack({"side": "left"})
                hoststatusframe = Frame(master=self, bg='white', bd=3, relief=RIDGE).pack({"side": "left"})
                hostbuttonframe = Frame(master=hostgameframe, bd=2, relief=RAISED, padx=5, pady=5).pack({"side": "bottom"})
                InfoLabel(master=hostgameframe, name='Hostname:', value=hostname, bgc='#999', nfgc='blue', vfgc='red').pack({"side": "top"})
                InfoLabel(master=hostgameframe, name='IP Address:', value=hostipaddr, bgc='#999', nfgc='blue', vfgc='red').pack({"side": "top"})
                LabelEntry(master=hostgameframe, name='Host on port:', variable=portsv, bgc='#999', fgc='blue', entrysize=len(str(hostport))).pack({"side": "top"})
                LabelEntry(master=hostgameframe, name='Players Joining:', variable=numofplayers, bgc='#999', fgc='blue', entrysize=2).pack({"side": "top"})
                LabelEntry(master=hostgameframe, name='Player Name:', variable=myname, bgc='#999', fgc='blue', entrysize=16).pack({"side": "top"})
                Button(master=hostbuttonframe, text='Host Game', width=10).pack({"side": "left"})
                Button(master=hostbuttonframe, text='Start Game', width=10).pack({"side": "left"})

            def close():
                self.destroy()

        def HostGameDialog():
            HostGameWindow()

        Button(master=self, text='Host a Game', command=HostGameDialog).pack()




root = Tk()
app = Application(master=root)
#root.wm_iconbitmap(default='INSERT ICON HERE')
#root.wm_title("TITLE OF PROGRAM")
#app.master.maxsize(640, 480)
app.master.minsize(640, 480)
app.master.resizable(0, 0)
app.mainloop()
app.quit()

Теперь по какой-то причине, когда я нажимаюХост игры Кнопка вызываетHostGameDialog() функция, и это создаетHostGameWindow(), НО создаваемое окно уменьшено до минимума, и все элементы GUI, которые должны содержаться вHostGameWindow() вместо этого класс появляется в основномApplication() Рамка. И что действительно странно для меня, так это то, чтоне дает никаких ошибок, он просто помещает все виджеты в основной фрейм приложения вместоToplevel() это создается.

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

Вау яНикогда раньше мне не приходилось так долго ждать ответа, это должно быть довольно изящной проблемой, я все еще нене знаю что делать Любые идеи с благодарностью!

Думаю, никто не знает, что с этим делать ... ЯЯ буду продолжать проверять здесь, хотя!

РЕШИТЬ! Оказывается, это не очень хорошая идея, чтобы создать И упаковать виджет в той же строке, если вы создаете ссылку на него. Создание и упаковка виджета в одной строке работает, только если вы просто вызываетеWidget(args*).pack(args*) без создания ссылки на него.

Ответы на вопрос(1)

Ваш ответ на вопрос