Как вернуть переменную, которая была изменена внутри функции внутри класса, и использовать ее в функции вне класса - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь использовать кнопку (tkinter), чтобы попытаться изменить сложность моей игры.Когда я нажимаю кнопку «легкий», «средний» или «жесткий», она должна изменить общую сложность на соответствующие значения каждой сложности 12, 16, 20 соответственно.Однако, когда я пытаюсь использовать измененное значение сложности за пределами класса, я получаю сообщение об ошибке: screen.ontimer (play, 1000 // затруднение) NameError: имя 'сложность' не определено

Я пыталсявернуть self.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

def play(app):
    rgb = (random(), random(), random())

    timeTaken = time() - startTime

    circles.append(my_circle(rgb))

    screen.title('SCORE: {}, TIME LEFT: {}'.format(score, int(round(gameLength - timeTaken, 0))))

    if time() - startTime > gameLength:
        screen.title('FINAL SCORE: {}'.format(score))
        screen.onclick(None)
        screen.clear()
    else:
        screen.ontimer(play, 1000 // app.difficulty)



root = Tk()

app = Application(root)

root.mainloop()

play(app)

Я ожидаю, что выбранное значение сложности (с помощью кнопки) будет использоваться в функции play ().

1 Ответ

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

ваша функция находится за пределами класса, поэтому, если вы хотите использовать какой-либо член класса, вы должны передать объект класса в качестве аргумента в вашу внешнюю функцию и выбросить этот объект, который вы можете использовать для этого члена класса.

, пожалуйста, проверьте обновленный код, указанный ниже ..

def play(app):
    rgb = (random(), random(), random())

    timeTaken = time() - startTime

    circles.append(my_circle(rgb))

    screen.title('SCORE: {}, TIME LEFT: {}'.format(score, int(round(gameLength - timeTaken, 0))))

    if time() - startTime > gameLength:
        screen.title('FINAL SCORE: {}'.format(score))
        screen.onclick(None)
        screen.clear()
    else:
        screen.ontimer(play, 1000 // app.difficulty)



root = Tk()

app = Application(root)

root.mainloop()

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