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 选项设置为 class 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 声明都是不必要的,并且除了第一个之外的所有声明在遇到它们时都会产生非致命语法警告。由于您只是调用全局变量的方法之一,而不是为变量名称本身赋值,因此您甚至不需要这样做,但如果您确实放入了一个——它没有坏处——只需声明它global once 在函数的最开始。

要注意的另一件事是变量lab1_datum_in将被赋值设置为None,因为grid()方法return 什么都没有——所以你应该把它分成两个单独的步骤。