簡體   English   中英

用標簽更新 Tkinter 文本

[英]Updating Tkinter text with label

我正在嘗試制作一個 GUI 版本的飲酒游戲,其中涉及擲骰子。 我虛擬地“擲骰子”,但想在屏幕上顯示結果。 我認為使用Label()會最有用,但是當完成新的擲骰子時,我無法更新該文本( throw_text變量)。 屏幕上沒有更新文本,而是在前一個文本下方出現新文本,並帶有新的投擲。 我不想要一個級聯的文本流,而只是一個在擲骰子時更新的單一文本,即當“擲骰子!”時。 按鈕被按下。

我見過人們使用Stringvar()來做到這一點,但是我一定是做錯了,因為它對外觀沒有影響。

from tkinter import *

dim = [900, 600]

root = Tk()
root.geometry(f"{dim[0]}x{dim[1]}")
root.title("Mex")
root.iconbitmap("dice.ico")

lbl = Label(root, font=("Times", 200))

num = ['\u2680', '\u2681', '\u2682', '\u2683', '\u2684', '\u2685']
d1 = None
d2 = None

throw_txt = StringVar()


def roll_dice():
    global d1, d2
    d1 = random.choice(num)
    d2 = random.choice(num)
    lbl.config(text=f"{d1}{d2}")
    lbl.pack()
    lbl.place(x=dim[0] / 3.8, y=50)

    print("Throw:", check_throw(convert_symbol()))

    throw_txt = str(check_throw(convert_symbol()))
    txt = Label(root, text=throw_txt)
    txt.pack(side=TOP)


def convert_symbol():
    d1_num = None
    d2_num = None
    for n in num:
        if n == d1:
            d1_num = num.index(n) + 1
        if n == d2:
            d2_num = num.index(n) + 1
    if d2_num > d1_num:
        throw = f"{d2_num}{d1_num}"
    else:
        throw = f"{d1_num}{d2_num}"
    return throw


def check_throw(t):
    num_t = int(t)
    if num_t == 21:
        return "Mex"
    elif num_t % 11 == 0:
        return f"Koning: {int(num_t / 11 * 100)}"
    elif num_t % 31 == 0:
        return "Slok uitdelen"
    else:
        return str(num_t)


roll_btn = Button(root, text="Roll!", width=10, command=roll_dice)
roll_btn.config(font=("Bahnschrift", 20))
roll_btn.pack()
roll_btn.place(x=dim[0] / 2.5, y=25)

roll_btn = Button(root, text="Convert", width=10, command=convert_symbol)
roll_btn.config(font=("Bahnschrift", 20))
roll_btn.pack()
roll_btn.place(x=dim[0] / 2.5, y=500)

root.mainloop()

您可以使用configure屬性而不是將 Label 小部件的文本存儲到單獨的變量中。

快速瀏覽一下這段代碼:

from tkinter import *
root = Tk()
root.title("my game")

def change_text():
    mylabel.configure(text="You just hit the button!")

mylabel = Label(root, text="Hit the button pls")
mylabel.grid(column=0, row=1, sticky='w')

mybutton = Button(root, text="Click me", command=change_text)
mybutton.grid(column=0, row=2, sticky='w')

root.mainloop()

暫無
暫無

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

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