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

Я пытаюсь изменить сложность моей игры с помощью главного меню с помощью tkinter.Когда кнопка нажата, легкий, средний или жесткий;Радиус цели должен изменить размер (сложнее = меньше).Однако, когда я нажимаю кнопку, она не меняет радиус, а вместо этого оставляет ее в ранее определенной глобальной переменной 20.

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

radius = 20   

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()
        read.geometry("%dx%d%+d%+d" % (500, 500, 250, 125))

        Label(read, text="Menu ", font='Helvetica 10 bold').grid(row=0, column=4)
        Label(read, text="    ", font='Helvetica 10 bold').grid(row=1, column=1)
        Label(read, text="Difficulty: ", font='Helvetica 10 bold').grid(row=3, column=1)

        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)

def play():
    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()

score = 0

circles = []

gameLength = 30

screen.onclick(lambda x, y: deletescore())

startTime = time()

play()

screen.mainloop()

Я ожидаю, что когда я нажимаю кнопку, она меняет радиус с 20 на соответствующее значение, easy = 30, med = 20, hard = 10.

1 Ответ

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

Ваш обратный вызов меню вызывает self.changeVariableX, но только те, которые установлены self.difficulty.Метод diff, который устанавливает глобальный radius на основе self.difficulty, никогда не вызывается.

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

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