2017-02-20 1 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

계산 기능 내에서 전역 변수로 시작하도록 선언 할 수 있으므로 전역 범위에서 업데이트됩니다. 전역을 피하려면 변경 가능한 개체의 "시작"부분을 만들 수도 있습니다.

관련 문제