所以我遇到了一个问题,每当我打开商店窗口,单击attackup 1按钮,当附加到它的命令运行时,它说attackUp1变量没有定义,即使它被设置为小部件。在我的代码处有一个峰值:
#opens shop canvas where you buy upgrades
def shop():
global shop
root = Tk()
root.title("Shop")
shop = Canvas (root, width = 150, height = 400, bg = "blue")
shop.pack()
attackUp1 = shop.create_window(77, 50, window = Button(shop, text = "Attack Up 1\n20 coins", font = ("calibri" , 20), command = attackIncreaser1))
#attackUp2 = shop.create_window(77, 100, window = Button(shop, text = "Attack Up 2\n60 coins", font = ("calibri" , 20), command = shoot))
#runs when someone buys the attackUp1 upgrade and changes their stats or says that they don't have enough coins
def attackIncreaser1():
global attack
global attackPower
global coins
global shop
global attackUp1
if coins < attackUp1Price:
attackUp1.config(text="Not enough coins")
elif coins >= attackUp1Price:
attackPower = attackPower + 1
attackUp1.config(text="")
time.sleep(0.5)
attackUp1.config(text="Attack Up 1\n20 coins")
这段代码没有运行,这意味着我必须猜测缺少什么,然后添加它才能进行调试。所以我的评论可能无关紧要。。。你知道吗
我不建议在函数中创建根窗口。你知道吗
变量
attackUp1
是在函数shop()
中创建的,函数使它成为局部变量。当函数退出时,它将被垃圾收集。你知道吗变量
attackUp1
的类型是int
。这就是画布对象的本质。如果要更改按钮文本,则需要保存对按钮的引用。你知道吗更新 当我再次查看这段代码时,我想知道为什么要在函数中创建一个
Tk()
实例,在我看来,您可能正在打开一个新窗口。如果是这种情况,您应该改用Toplevel()
。拥有多个根窗口不是一个好主意:Why are multiple instances of Tk discouraged?对于传递按钮引用,这可能起作用:
相关问题 更多 >
编程相关推荐