You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter Entry值获取异常:注册表单Entry值打印为空求助

问题原因及解决方法

问题根源

你创建注册窗口时用了Tk(),这会生成一个全新的Tcl解释器实例,而全局定义的uservals和passwords这两个StringVar是绑定在主窗口(第一个Tk()实例)的解释器上的,新窗口的Entry组件无法和这些全局StringVar正确关联,导致获取到空值。

解决步骤

把注册窗口的Tk()替换成Toplevel(),它是主窗口的子窗口,共享同一个Tcl解释器,这样全局的StringVar就能正常和新窗口的Entry绑定:

修改后的完整代码:

from tkinter import *
from tkinter import messagebox as msg

root = Tk()
users = {'pawan': '123'}

userval = StringVar()
password = StringVar()
uservals = StringVar()
passwords = StringVar()

def submitForm():
    if userval.get() in users:
        root.destroy()
        main = Tk()
        main.geometry("200x200")
    else:
        msg.showinfo(message='Invalid User or Password')
    print(users)

def signupForm():
    print(uservals.get())
    print(passwords.get())
    # 可添加注册逻辑,比如将新用户存入字典
    # users[uservals.get()] = passwords.get()

root.geometry("655x333")
root.title("Library")

tframe = Frame(root, bg="black")
tframe.pack(side="top", fill="both")

heading = Label(tframe, text="Welcome to Our library", bg="red", borderwidth=12).pack()

fframe = Frame(root, width=400, height=200)
fframe.pack()

user = Label(fframe, text="Username").grid()
passw = Label(fframe, text="Password").grid(row=1, column=0)

userin = Entry(fframe, textvariable=userval)
userin.grid(row=0, column=1)
passwin = Entry(fframe, textvariable=password, show="*")
passwin.grid(row=1, column=1)

loginb = Button(fframe, text='Login', command=submitForm).grid(row=3, column=0)

def signup():
    # 替换Tk()为Toplevel,绑定主窗口root
    sign = Toplevel(root)
    sign.geometry("400x200")
    Label(sign, text="Enter Email").grid()
    Label(sign, text="Enter Password").grid(row=1, column=0)
    si = Entry(sign, textvariable=uservals)
    si.grid(row=0, column=1)
    Entry(sign, textvariable=passwords, show="*").grid(row=1, column=1)
    Button(sign, text='Signup', command=signupForm).grid(row=3, column=0)

Button(fframe, text='Signup', command=signup).grid(row=3, column=1)

root.mainloop()

额外优化建议

  • 注册成功后可清空输入框:在signupForm中添加uservals.set("")和passwords.set("")
  • 增加输入验证逻辑,比如检查用户名/密码是否为空、密码长度是否达标等
  • 避免过度使用全局变量,后续可将UI逻辑封装为类,提升代码可维护性

内容的提问来源于stack exchange,提问作者pawankvip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:20:35