我正在开发一个游戏,在该游戏中,我有一个登录屏幕,后跟一个主菜单,然后是主游戏窗口。在主菜单中,我有一个按钮,该按钮应更改游戏的难度,这将导致目标半径的变化。难度越高,半径越小。当我分配变量半径,然后尝试使用按钮(在班级内部)进行更改时,它将不起作用,而是使用先前定义的半径。
我尝试设置许多不同的全局变量。
{{- if eq .Values.foo.deployment.isFirst "1" }}
...
...
{{- end }}
我希望当我单击按钮时容易,中等,困难,它将改变难度,将半径设置为相应的值。
答案 0 :(得分:1)
我敢打赌,错误在于您如何呼叫Button.__init__()
。
Button(read, text="Easy", font='Helvetica 10 bold', command=self.changeVariable1()).grid(row=3, column=2)
Button(read, text="Medium", font='Helvetica 10 bold', command=self.changeVariable2()).grid(row=3, column=3)
Button(read, text="Hard", font='Helvetica 10 bold', command=self.changeVariable3()).grid(row=3, column=4)
您正在尝试将command
分配给Button
,例如command=self.changeVariable1()
对于Python,函数和方法都是实例,command
需要一个函数实例,但是您将结果赋予self.changeVariable1()
'。
删除括号应予以解决:
Button([...], command=self.changeVariable1)
编辑:我敢打赌bumblebee的答案也正确,而且您需要两种修复方法:)
答案 1 :(得分:0)
在您的APplication类中,您声明了difficulty
变量,并使用某些值对其进行了初始化。
这是可以使用self.difficulty
访问的类变量。
但是,当您基于difficulty
变量更改半径值时,实际上是在访问全局实例。
不需要保留变量difficulty
的全局实例。
修改为:
class Application(Frame):
def __init__(self, master):
super().__init__(master)
self.difficulty = -1
self.grid()
self.login = self.create_main()
self.read = None
def changeVariable1(self):
self.difficulty = 12
def changeVariable2(self):
self.difficulty = 16
def changeVariable3(self):
self.difficulty = 20
def diff(self):
global radius
if self.difficulty == 12:
radius = (30)
elif self.difficulty == 16:
radius = (20)
elif self.difficulty == 20:
radius = (10)
def create_read(self):
read = Toplevel()
Button(read, text="Easy", font='Helvetica 10 bold', command=self.changeVariable1()).grid(row=3, column=2)
Button(read, text="Medium", font='Helvetica 10 bold', command=self.changeVariable2()).grid(row=3, column=3)
Button(read, text="Hard", font='Helvetica 10 bold', command=self.changeVariable3()).grid(row=3, column=4)
return read
root = Tk()
app = Application(root)
root.mainloop()
我希望这会有所帮助!。