Как изменить ранее назначенную переменную с функцией в классе - PullRequest
0 голосов
/ 05 февраля 2019

Я работаю над игрой, в которой у меня есть экран входа в систему, за которым следует главное меню и главное окно игры.В главном меню у меня есть кнопка, которая должна изменить сложность игры, что приведет к изменению радиуса цели.Чем выше сложность, тем меньше радиус.Когда я назначаю свой переменный радиус, а затем пытаюсь изменить его с помощью кнопки (внутри класса), он не будет работать и вместо этого будет использовать ранее определенный радиус.

Я пытался установить множество различных глобальных переменных.

difficulty = -1

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 difficulty == 12:
            radius = (30)
        elif difficulty == 16:
            radius = (20)
        elif 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()

Я ожидаю, что когда я нажимаю кнопку «легкий, средний, жесткий», она меняет сложность, которая устанавливает радиус на соответствующийзначение.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Бьюсь об заклад, ошибка в том, как вы звоните 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)

Редактировать: Бьюсь об заклад, Шмель * Ответ 1019 * также верен, и вам нужно оба исправления:)

0 голосов
/ 05 февраля 2019

В вашем классе 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()

Надеюсь, это поможет!.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...