![](/img/trans.png)
[英]Why the Label is not changing with StringVar in this code? (tkinter)
[英]Tkinter. StringVar(). How I can update the Label in my code.
我在更新标签小部件 (lab1_datum_in) 时遇到问题。 每次更改单选按钮时,我都想更改标签文本。 真不知道怎么回事。 有人可以帮忙吗? 我的解释器是 Python 3.4
提前致谢!
import tkinter
root = tkinter.Tk()
# Creating radiobuttons
v = tkinter.IntVar()
v.set(1) # initializing the choice
transformation_types = [
("WGS84 --> ED50(North of 62N)",1),
("WGS84 --> ED50(South of 62N)",2),
("ED50(North of 62N) --> WGS84",3),
("ED50(South of 62N) --> WGS84",4),
]
datum_in_text = tkinter.StringVar()
datum_in_text.set('WGS84')
def ChangeDatumText():
if v.get() == 1:
global datum_in_text
datum_in_text.set('WGS84')
elif v.get() == 2:
global datum_in_text
datum_in_text.set('WGS84')
elif v.get() == 3:
global datum_in_text
datum_in_text.set('ED50(North of 62N')
elif v.get() == 4:
global datum_in_text
datum_in_text.set('ED50(North of 62N')
for txt, val in transformation_types:
tkinter.Radiobutton(root,
text=txt,
padx=20,
variable=v,
command=ChangeDatumText,
value=val).grid()
lab1_datum_in = tkinter.Label(root, text=datum_in_text.get()).grid(row=9, column=1)
root.mainloop()
正如@jonrsharpe 在评论中指出的那样,要从属 Label 小部件上显示的文本,您需要将textvariable
选项设置为StringVar
类的控制变量,在您的情况下为datum_in_text
。 您拥有的text
选项用于显示一行或多行静态文本。
这意味着您需要使用:
lab1_datum_in = tkinter.Label(
root, textvariable=datum_in_text).grid(row=9, column=1)
而不是你所拥有的。
顺便说一句,您在ChangeDatumText()
函数中拥有的所有global datum_in_text
声明都是不必要的,并且在遇到它们时,除了第一个之外的所有声明都会产生非致命的语法警告。 由于您只是调用全局变量的方法之一,而不是为变量名称本身赋值,因此您甚至不需要这样做,但是如果您确实放入了一个 - 它不会受到伤害 - 只需声明它在函数一开始就全局一次。
另一件要注意的事情是变量lab1_datum_in
将通过赋值设置为 ti None
因为grid()
方法不返回任何东西——所以你应该把它分成两个单独的步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.