我正在使用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()
以来,小工具一直没有显示。
(由于某种原因,全局需要在每个变量上声明两次,但这不是问题)
答案 0 :(得分:2)
您将初始框架(变量frame
)放在master
中,并且您正在使用pack
。其余小部件也在master
中,您正在使用grid
。这通常会导致程序锁定,因为网格会尝试排列小部件,包会注意到它们已经改变并尝试重新排列小部件,网格会注意到它们已经改变并尝试重新排列小部件,等等。 / p>
我的猜测是,代码的原始意图是将title_username
,title_password
等放在frame
而不是master
中,因为没有其他明显用途frame
。