我想写一个程序,在用户输入文本并单击按钮后,文本成为标签,按钮文本被更改。我的代码是:
# 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()
用户输入可以工作,但单击按钮不会执行任何操作,尽管它应该更改按钮和标签显示的变量。我在什么地方搞砸了吗
command
参数采用函数名。如果使用参数编写完整的调用,则不是函数名,而是这个函数调用返回的内容。因此,您的按钮将无法工作。它将具有命令None
为了做你想做的事情,你必须让你正在调用的函数能够访问
StringVar()
。因此,您既可以获取条目的内容,也可以更改按钮和标签的值。为此,最好将字符串变量和小部件作为属性添加到您已经创建的顶层(something
)。因此,它们对所有功能都可用,您可以获取和更改信息:您的代码中几乎没有问题:
textvariable
,应改为使用StringVar
command=enter(...)
将立即执行enter(...)
,然后将None
分配给command
选项,应改为使用lambda
enter()
内的字符串不会自动更新标签和按钮,应改为使用StirngVar
上的.set()
以下是修改代码:
相关问题 更多 >
编程相关推荐