我正在尝试在我的Tkinter窗口底部创建一个标签,该标签将根据所选的下拉菜单更新用户点击"生成"按钮。我已经达到了我的代码无错误地运行的程度,但它没有输出标签,它保持为Py_var0。谁能告诉我我在哪里出错?我知道它必须在run函数中,或者Labelvar的设置方式不正确,但我对Python来说相对较新,所以我被卡住了!我已经尝试查找了,我的代码看起来就像我设置的所有示例和答案一样,所以我必须错过一些明显的东西!
感谢您的帮助:
from tkinter import *
kb = Tk()
def run():
global Labelvar
if var1.get() == "A":
Labelvar.set("Label updated")
resultlabel.config(text=Labelvar)
return
Labelvar = StringVar(kb)
var1 = StringVar(kb)
var1.set("A")
resultlabel = Label(kb, text=Labelvar)
menu = OptionMenu(kb, var1, "A", "B", "C")
generate = Button(kb, text="Go", command=run)
menu.grid(row=1, column=2)
generate.grid(row=4, column=2, sticky=W)
resultlabel.grid(row=5, column=1)
mainloop()
答案 0 :(得分:0)
问题出在resultlabel.config(text=Labelvar)
,因为text参数需要一个字符串,但是如果你传递了其他东西(不确定),比如StringVar,标签会抓住你传递的内容并将str()
应用于它。解决这个问题
from tkinter import *
kb = Tk()
def run():
if var1.get() == "A":
Labelvar.set("Label updated")
resultlabel.config(textvariable=Labelvar)
return
Labelvar = StringVar()
var1 = StringVar()
var1.set("A")
resultlabel = Label(kb, textvariable=Labelvar)
menu = OptionMenu(kb, var1, "A", "B", "C")
generate = Button(kb, text="Go", command=run)
menu.grid(row=1, column=2)
generate.grid(row=4, column=2, sticky=W)
resultlabel.grid(row=5, column=1)
#This two methods are simply for testing purposes. It works.
run()
kb.mainloop()