2017-02-20 5 views
0

私は '計算'ボタンがクリックされると、必要な計算を実行し、ユーザーにメッセージボックスを表示する簡単なゲームを書いています。その後、ユーザーは再生を続けることができます。しかし、ボタンをクリックするたびに開始値1000を使用するたびに、ユーザーが持っている金額(「開始」)を追跡する変数は更新されません。どのように更新できますか?ありがとうございました!tkinterでボタンを使用しているときに変数を更新するにはどうすればよいですか?

starting = 1000 
#calculation procedure 
def calculate(starting): 
    dice1 = random.randrange(1,7) 
    get_bet_entry=float(bet_entry.get()) 
    get_roll_entry = float(roll_entry.get()) 
    if dice1 == get_roll_entry: 
     starting = starting + get_bet_entry 
     messagebox.showinfo("Answer","You won! Your new total is $" + str(starting)) 
     return(starting) 
    else: 
     starting = starting - get_bet_entry 
     messagebox.showinfo("Answer","You are wrong, the number was " + str(dice1) + '. You have $' + str(starting)) 
     return(starting) 


#designing bet button 
B2 = Button(root,text = "Bet", padx=50, command = lambda: calculate(starting)) 
+0

コードには 'bet_entry'と' roll_entry'の定義がありません。更新していただけますか? – void

答えて

0

返される変数がないため、ボタンのコールバックから値を返さないでください。

メソッド内で変数を更新するにはglobalを使用するか、IntVar()を使用します。 IntVar()を使用することをお勧めします。

starting = IntVar(root) 
starting.set(1000) 

def calculate(): 
    #calculations 
    starting.set(calculation_result) 
    messagebox.showinfo("Answer","You won! Your new total is $" + str(starting.get())) 

B2 = Button(......, command = calculate) 

あなたは本当に両方のアプローチでは、あなたのメソッドにパラメータとしてstarting渡す必要はありませんグローバル、

starting = 1000 

def calculate(): 
    global starting 
    #calculations 
    starting = calculation_result 

B2 = Button(......, command = calculate) 

ノートを使用したい場合。

1

グローバル変数として開始することは、calculate関数内で宣言することができるため、グローバルスコープで更新されます。 グローバルを避けたい場合は、変更可能なオブジェクトの「開始」部分を作成することもできます。

関連する問題