Tkinter 标签位于框架的底部

Tkinter label go at the bottom of the frame

我使用 Tkinter 和包布局管理的 Python 小应用程序有点问题。我不明白为什么标签会出现在框架的底部。

代码如下:

class App:

def __init__(self, master):

    frame = Frame(master)
    frame.pack()

    photo = PhotoImage(file="icone.gif")
    self.label = Label(image=photo)
    self.label.image = photo # keep a reference!
    self.label.pack()

    self.labelNet = Label(master, text='NetID:')
    self.labelNet.pack()

    self.netID = Entry(frame,width=20)
    self.netID.pack()

    self.password = Label(master, text='Password:')
    self.password.pack()

    self.password = Entry(frame, show="*",  width=20)
    self.password.pack()

    self.install = Button(frame, text="Activer", command=self.install)
    self.install.pack()

    self.uninstall = Button(frame, text="Désactiver", command=self.uninstall)
    self.uninstall.pack()

呼叫者:

root = Tk()
root.title("Title")
root.geometry("200x280")
app = App(root)
root.mainloop()

结果:

您知道问题出在哪里吗?

谢谢!

self.label = Label(image=photo)
...
self.labelNet = Label(master, text='NetID:')
...
self.password = Label(master, text='Password:')

您所有的标签都使用 master 作为它们的主标签,或者您没有提供主标签(在这种情况下它默认为根 window)。所有其他小部件都以框架作为它们的主人。这有效地使您拥有像这样的小部件层次结构:

root
    frame
        entry
        entry
        button
        button
    label
    label
    label

您应该让标签也以框架为主。

self.label = Label(frame, image=photo)
...
self.labelNet = Label(frame, text='NetID:')
...
self.password = Label(frame, text='Password:')

或者,或者,根本没有框架,让一切成为根的直接子代。