Tkinter self.grid 使小部件不可见

Tkinter self.grid making widgets invisible

我正在使用 tkinter 进行 username/password 确认,我 运行 遇到了小部件不再显示的问题。

"""
Password entry/confirmation class
"""
from tkinter import *

class Menu:
    def __init__(self,master):

        frame = Frame(master)
        frame.pack()

        title_username = Label(master, text="User Name")
        title_username.grid(row=0, column=0)

        title_password = Label(master, text="Password")
        title_password.grid(row=1, column=0)

        global username
        username = Entry(master, bd=5)
        username.grid(row=0, column=1)

        global password
        password = Entry(master, bd=5)
        password.grid(row=1, column=1)

        confirm_username = Button(master, text="Done",
                                  fg="black",command=self.get_username)
        confirm_username.grid(row=0, column=2)

        confirm_password = Button(master, text="Done",
                                  fg="black",command=self.get_password)
        confirm_password.grid(row=1, column=2)

    def show_all(self):
        self.root.update()
        self.root.deiconify()

    def get_username(self):
        global username
        username = username.get()
        print(username)

    def get_password(self):
        global password
        password = password.get()
        print(password)

root = Tk()
app = Menu(root)
root.mainloop()

自从我使用 grid() 而不是 pack() 以来,小部件一直没有显示。 (出于某种原因需要在每个变量上声明两次全局,但这不是问题)

您正在将初始帧(变量 frame)放入 master,并且您正在使用 pack。其余小部件也在 master 中,您正在使用 grid。这通常会导致您的程序锁定,因为 grid 会尝试排列小部件,pack 会注意到它们已更改并尝试重新排列小部件,grid 会注意到它们已更改并尝试重新排列小部件,等等。

我的猜测是,代码的初衷是将 title_usernametitle_password 等放在 frame 而不是 master 中,因为没有其他明显的用于 frame.