使用Tkinter开发Python基准应用时用户输入无法输出的问题求助
解决Tkinter登录模块无法获取用户名和密码输入的问题
问题核心:你创建了usrnme和passw两个StringVar变量,但没有将它们与对应的Entry输入框绑定,且变量定义顺序在Entry创建之后,导致输入框内容无法同步到变量中。
修复步骤:
- 先定义
usrnme和passw变量,再创建Entry控件 - 创建Entry时,通过
textvariable参数将输入框与变量绑定
修改后的完整代码:
import tkinter as tk from tkinter.ttk import * app = tk.Tk() # 先定义用于绑定输入框的变量 usrnme = tk.StringVar() passw = tk.StringVar() selected = tk.StringVar() def OnSubmit(): print(str(usrnme.get())) print(str(passw.get())) print(str(selected.get())) app.title("Pymark: Landing Page") app.geometry("600x600") app.resizable(0, 0) desc = """ PyMark is the first benchmark created using python's native GUI creator "Tkinter" and using hashes to rank performance. The sofware is light and can run on older CPU's like i7-4510U (the processor I use) and does not require a lot of memory. I am still open for constructive critisism and community feedback on my work as I am a beginner programmer. IMPORTANT: PyMark can still experience bugs thus, pull requests are encouraged! Please continue enjoying PyMark! """ # Landing Page lpframe = Frame(app) mainheading = Label(lpframe, text="Welcome to PyMark!", font = ('Times New Roman', 20)) maindesc = Label(lpframe, text=f'{desc}', font = ('Times New Roman', 9)) lpframe.pack() mainheading.pack(padx = 10, pady = 10) maindesc.pack(padx = 10, pady = 10) # Login Page loginframe = Frame(app) headerframe = Frame(loginframe, relief = 'groove') loginheader = Label(headerframe, text='Login / Register: ', font = ('Times New Roman', 12)) usrnmelb = Label(loginframe, text = 'Username: ', font = ('Times New Roman', 9)) passlb = Label(loginframe, text = 'Password: ', font = ('Times New Roman', 9)) register = Radiobutton(loginframe, text='Register', value='reg', variable=selected) login = Radiobutton(loginframe, text='Login', value='log', variable=selected) submitbtn = Button(loginframe, text = 'Submit', command=OnSubmit) # 创建Entry时绑定对应的StringVar usrnmeentr = Entry(loginframe, textvariable=usrnme) passentr = Entry(loginframe, textvariable=passw, show='*') # 可选:密码框显示星号,提升安全性 loginframe.pack() headerframe.pack(padx = 20, pady = 20) loginheader.pack(padx = 20, pady = 20) usrnmelb.pack() usrnmeentr.pack() passlb.pack() passentr.pack() register.pack() login.pack() submitbtn.pack(padx = 10, pady = 10) usrnmeentr.focus() app.mainloop()
额外优化建议:
- 密码输入框添加
show='*'参数,隐藏输入内容,符合登录场景的安全性需求 - 若需要验证输入合法性,可在
OnSubmit函数中增加非空判断逻辑
内容的提问来源于stack exchange,提问作者Aerohelp
相关产品推荐
相关产品推荐

