Tkinter self.grid使小部件不可见

时间:2015-05-05 18:59:22

标签: python tkinter python-3.4

我正在使用tkinter进行用户名/密码确认,而且我遇到了小部件不再显示的问题。

"""
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()以来,小工具一直没有显示。 (由于某种原因,全局需要在每个变量上声明两次,但这不是问题)

1 个答案:

答案 0 :(得分:2)

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

我的猜测是,代码的原始意图是将title_usernametitle_password等放在frame而不是master中,因为没有其他明显用途frame