Python 尽管tkinter上的变量已更改,但显示未更改
我想写一个程序,在用户输入文本并单击按钮后,文本成为标签,按钮文本被更改。我的代码是:Python 尽管tkinter上的变量已更改,但显示未更改,python,tkinter,Python,Tkinter,我想写一个程序,在用户输入文本并单击按钮后,文本成为标签,按钮文本被更改。我的代码是: # Imports import os, sys import tkinter """ Tkinter program 1 text box + button + label """ # Button Entry def enter(inputtedinfo, randvar, EnterMessage): randvar =
# Imports
import os, sys
import tkinter
"""
Tkinter program 1
text box + button + label
"""
# Button Entry
def enter(inputtedinfo, randvar, EnterMessage):
randvar = inputtedinfo.get()
EnterMessage = "Submitted!"
# Main Function
def main():
something = tkinter.Tk()
something.title("My First Tkinter Window")
something.geometry("600x400")
randvar = ""
EnterMessage = "Enter"
inputtedinfo = tkinter.StringVar()
userLabel = tkinter.Label(something, text = randvar)
userEntry = tkinter.Entry(something, textvariable = inputtedinfo)
userButton = tkinter.Button(something, text = EnterMessage, command = enter(inputtedinfo, randvar, EnterMessage))
userEntry.grid(row=0,column=0)
userLabel.grid(row=0,column=1)
userButton.grid(row=0,column=2)
something.mainloop()
sys.exit(0)
if(__name__ == "__main__"):
main()
用户输入可以工作,但单击按钮不会执行任何操作,尽管它应该更改按钮和标签显示的变量。我在什么地方搞砸了吗?命令的
参数取函数名。如果使用参数编写完整的调用,则不是函数名,而是这个函数调用返回的内容。因此,您的按钮将无法工作。它将具有命令None
为了执行您想要执行的操作,您必须使正在调用的函数可以访问StringVar()
s。因此,您既可以获取条目的内容,也可以更改按钮和标签的值。为此,最好将字符串变量和小部件作为属性添加到您已经创建的顶层(something
)。因此,它们对所有功能都可用,您可以获取和更改信息:
# Button Entry
def enter():
something.randvar.set(something.inputtedinfo.get())
something.userButton["text"] = "Submitted!"
# Main Function
def main():
global something
something = tkinter.Tk()
something.title("My First Tkinter Window")
something.geometry("600x400")
something.randvar = tkinter.StringVar()
something.randvar.set("")
EnterMessage = "Enter"
something.inputtedinfo = tkinter.StringVar()
userLabel = tkinter.Label(something, textvariable = something.randvar)
something.userEntry = tkinter.Entry(something, textvariable = something.inputtedinfo)
something.userButton = tkinter.Button(something, text = EnterMessage, command = enter)
something.userEntry.grid(row=0,column=0)
userLabel.grid(row=0,column=1)
something.userButton.grid(row=0,column=2)
something.mainloop()
if(__name__ == "__main__"):
main()
您的代码中几乎没有问题:
- 将字符串分配给
textvariable
,应改为使用StringVar
command=enter(…)
将立即执行enter(…)
,然后将None
分配给command
选项,应改用lambda
- 更新
enter()
中的字符串不会自动更新标签和按钮,应使用StirngVar
上的.set()
以下是修改代码:
def输入(输入信息、随机变量、输入消息):
#使用.set()更新StringVar
randvar.set(inputedInfo.get())
entremessage.set(“已提交!”)
def main():
something=tkinter.Tk()
标题(“我的第一个Tkinter窗口”)
几何学(“600x400”)
randvar=tkinter.StringVar()#更改为StringVar()
EnterMessage=tkinter.StringVar(value=“Enter”)#更改为StringVar()
inputedInfo=tkinter.StringVar()
userLabel=tkinter.Label(something,textvariable=randvar)#使用textvariable代替text选项
userEntry=tkinter.Entry(something,textvariable=InputedInfo)
userButton=tkinter.Button(something,textvariable=EnterMessage,command=lambda:enter(inputedInfo,randvar,EnterMessage))
grid(行=0,列=0)
userLabel.grid(行=0,列=1)
网格(行=0,列=2)
something.mainloop()
command=enter(…)
将立即执行enter(…)
,并将None
分配给命令
选项。因此,当点击按钮时,不会发生任何事情。除此之外。这不是Python变量的工作方式。enter
中的EnterMessage
与main
中的EnterMessage
无关。您正在传递该变量的值,但它不是指针;您不能在调用函数中更改entremessage
的值。