2017-01-07 14 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:質問に実際にコードを書いた人であれば、ラベルを更新する方法はすでに分かっているようです。あなたが何を求めているのか分かりません。 –

関連する問題