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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:40:30