标签不在python tkinter中更新

时间:2014-12-26 23:32:44

标签: python python-3.x tkinter label

我正在写一个tkinter程序,我试图在ui上更新我的标签。但是,我无法让它发挥作用。这是代码:

from tkinter import *
import random, functools, string

root = Tk()

word_list = ["APPLE", "PEAR", "BANNANA"]

word = word_list [random.randint(0,2)]

hidden_word = ["_ "] * len(word)
print (word)


abc = ['_ '] * len(word)
guessed_letters = []

#Functions
def click_1 (key):
    if key in word:
        guessed_letters = ''.join([key])
        global abc
        abc = ''.join([key if key in guessed_letters else "_" for key in word])
    else:
        print ("Nope") ####TESTING#####


#Frames
hangman_frame = Frame(root)
hangman_frame.grid(row=0, column=0, sticky=N)
letter_frame = Frame(root)
letter_frame.grid(row=1, column=0, sticky=S)

#Label
letters_label = Label(hangman_frame, textvariable=abc)
letters_label.grid(row=0, column=0, sticky=W)

(只是摘录,不是全部)

我的问题是,在运行时,此部分似乎不起作用:

letters_label = Label(hangman_frame, textvariable=abc)

其中:

abc = ['_ '] * len(word)
    guessed_letters = []

#Functions
def click_1 (key):
    if key in word:
        guessed_letters = ''.join([key])
        global abc
        abc = ''.join([key if key in guessed_letters else "_" for key in word])

没有任何东西出现,而当这一点出现时:

letters_label = Label(hangman_frame, text=abc)

标签显示,但在调用click_1函数时不会更新。

有什么理由吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

原因是textvariable选项需要StringVarIntVar的实例。你不能只传递一个普通变量的名称。

一般来说,除非您特别需要textvariableStringVar的功能(例如让两个小部件共享相同的数据或执行操作),否则您永远不需要使用IntVar选项变量上的痕迹)。我知道有很多例子使用它,但它只是添加了另一个你并不需要的对象。

要更新标签上的文字,您可以这样做:

letters_label = Label(..., text="initial value")
...
def click_1(...):
    ...
    abc = ...
    letters_label.configure(text=abc)