Tkinter的。 STRINGVAR()。我如何在我的代码中更新标签。

时间:2015-02-27 23:07:23

标签: python tkinter label

我在更新Label小部件时遇到问题(lab1_datum_in)。 我想每次更改radiobuttons时都要更改Label文本。 真的不知道出了什么问题。 有人可以帮忙吗? 我的翻译是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()

1 个答案:

答案 0 :(得分:0)

正如@jonrsharpe在评论中指出的那样,要对Slaft小部件上显示的文本进行委托,您需要将textvariable选项设置为类StringVar的控件变量,在您的情况下为datum_in_text 1}}。您拥有的text选项用于显示一行或多行静态文本。

这意味着你需要使用:

lab1_datum_in = tkinter.Label(
                    root, textvariable=datum_in_text).grid(row=9, column=1)

而不是你拥有的。

顺便说一下,global datum_in_text函数中的所有ChangeDatumText()声明都是不必要的,除了第一个声明时,它们都会在遇到它们时产生非致命语法警告。既然您只调用了一个全局变量的方法,而不是为变量名本身分配一个值,那么您甚至不需要这样做,但如果您确实将其中的一个放入其中没有伤害 - 只需在功能开始时将其声明为全局。