簡體   English   中英

標簽未在python tkinter中更新

[英]Label not updating in python tkinter

我正在編寫一個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函數時不會更新。

有什么理由嗎? 提前致謝。

原因是textvariable選項需要StringVarIntVar的實例。 您不能只是將其傳遞給普通變量的名稱。

一般來說,除非特別需要StringVarIntVar (例如,讓兩個小部件共享同一數據,或者對變量進行跟蹤),否則永遠不需要使用textvariable選項。 我知道很多示例都使用它,但是它只是添加了您實際上不需要的另一個對象。

為了更新標簽上的文本,您可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM