在tkinter中使用按钮时如何更新变量?

时间:2017-02-20 06:11:38

标签: python tkinter

我正在编写一个简单的游戏,其中“计算”时间为'单击按钮,它将执行必要的计算并向用户显示消息框。然后用户可以继续播放。但是,跟踪用户所用资金的变量“开始”并不会在每次单击按钮时更新,而是使用起始值1000.如何更新?谢谢!

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))

2 个答案:

答案 0 :(得分:1)

您可以在计算函数中声明作为全局变量启动,以便在全局范围内更新。 如果你想避免全局变量,你也可以使“开始”成为可变对象的一部分。

答案 1 :(得分: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 = 1000

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

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

请注意,在这两种方法中,您都不需要将starting作为参数传递给您的方法。