Tkinter开发登录应用窗口显示异常:用户名密码标签提前显示
问题原因
- 按钮绑定回调函数时错误添加了括号:
command=login()、command=register()的写法会让程序在初始化阶段就直接执行这两个函数,而非点击按钮时才触发 - 注册逻辑里的控件没有指定父窗口:
register函数中创建的Label、Entry默认挂载到了全局主窗口screen上,所以相关内容会直接显示在主界面,而非弹出的注册窗口 - 额外小问题:注册窗口的输入框没有调用
pack()方法,就算绑定了正确父窗口也无法正常显示
修复后完整代码
from tkinter import * def login(): print('Login Started') def register(): screen1 = Toplevel(screen) screen1.title('Register') screen1.geometry('300x250') username = StringVar() password = StringVar() # 给所有控件指定父窗口为弹出的注册窗口screen1 Label(screen1, text = 'Username * ').pack() Entry(screen1, textvariable = username).pack() Label(screen1, text = 'Password * ').pack() Entry(screen1, textvariable = password).pack() def main_screen(): global screen screen = Tk() screen.geometry('300x250') screen.title('notes') Label(text = "Notes 1.0", bg = "grey", width = '300', height = '2', font = ("Calibri", 13)).pack() Label(text = '').pack() # 回调函数去掉括号,仅传入函数名即可 Button(text = 'Login', width = '30', height = '2', command = login).pack() Label(text = '').pack() Button(text = 'Register', width = '30', height = '2', command = register).pack() screen.mainloop() main_screen()
内容的提问来源于stack exchange,提问作者Ayden Quinn
相关产品推荐
相关产品推荐

