2017-01-07 90 views
-1

我試圖完成的是,當有人點擊拿1或2個硬幣時,status_label會更新硬幣的狀態。但我不知道該怎麼辦呢點擊按鈕更新Tkinter中的標籤

下面的代碼:

from tkinter import * 

player = 1 
coins = 21 

def take_one(coins): 
    status_label.config(text="Aantal coins: " + str(coins - 1)) 

def take_two(coins): 
    status_label.config(text="Aantal coins: " + str(coins - 2)) 

root = Tk() 
root.geometry('300x200') 
root.title('Nim Game') 

frame = Frame(root) 

titel_frame = Label(frame, text="""************ NIM GAME *********** 
************  REGELS  *********** 
----------------------------------------------------- 
U moet 1 of 2 rietjes munten pakken uit de stapel. 
De speler die de laatste munt verwijdert is de verliezer. 
-----------------------------------------------------""") 
titel_frame.pack() 

status_label = Label(frame, text="Aantal coins: " + str(coins) + "") 
status_label.pack() 
player_label = Label(frame, text="Player " + str(player) + " is aan de beurt!") 
player_label.pack() 

take_one_coin = Button(frame, text="Take 1 coin", command = lambda: take_one(coins)) 
take_one_coin.pack() 
take_two_coins = Button(frame, text="Take 2 coins", command = lambda: take_two(coins)) 
take_two_coins.pack() 

frame.pack() 

root.mainloop() 

回答

0

的問題是,你的函數只修改他們的coins本地副本,這是全局變量的時候初始化該按鈕已創建。

解決問題的最簡單方法是刪除命令的參數,並讓命令對全局變量進行操作。

例如:

def take_one(): 
    global coins 
    coins = coins-1 
    status_label.config(text="Aantal coins: " + str(coins)) 
... 
take_one_coin = Button(..., command = take_one) 
+0

非常感謝。現在它的工作完美! – Freddie

+0

@Freddie:假設您是問題中實際編寫代碼的人,您似乎已經知道如何更新標籤。我不明白你在問什麼。 –