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_username
、title_password
等放在 frame
而不是 master
中,因为没有其他明显的用于 frame
.
我正在使用 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_username
、title_password
等放在 frame
而不是 master
中,因为没有其他明显的用于 frame
.