如何使用类中的函数更改先前分配的变量

时间:2019-02-05 09:55:08

标签: python tkinter

我正在开发一个游戏,在该游戏中,我有一个登录屏幕,后跟一个主菜单,然后是主游戏窗口。在主菜单中,我有一个按钮,该按钮应更改游戏的难度,这将导致目标半径的变化。难度越高,半径越小。当我分配变量半径,然后尝试使用按钮(在班级内部)进行更改时,它将不起作用,而是使用先前定义的半径。

我尝试设置许多不同的全局变量。

{{- if eq .Values.foo.deployment.isFirst "1" }}
...
...
{{- end }}

我希望当我单击按钮时容易,中等,困难,它将改变难度,将半径设置为相应的值。

2 个答案:

答案 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()

我希望这会有所帮助!。