Как передать аргументы обратному вызову, связанному с объектом на холсте tkinter? - PullRequest
0 голосов
/ 18 июня 2019

Я делаю игру в крестики-нолики, и когда вы нажимаете кнопку паузы (на самом деле это не кнопка, а просто прямоугольник с двумя линиями, похожими на символ паузы, который при нажатии генерирует обратный вызов) ), новый холст покрывает холст, отображающий игру, и вместо этого отображает «Приостановлено», «Возобновить», «Перезапустить» и «Выйти». Когда вы нажимаете Resume или Restart, я пытаюсь уничтожить новый холст, но поскольку он был создан в обратном вызове для паузы, он не является глобальным, и я не могу понять, как передать его в качестве аргумента .

Я пробовал лямбду в разных модах, но это не работает.

def resume(event):
    pausedisplay.destroy()

def pause(event):
    pausedisplay = Canvas(game, bg = "grey", highlightbackground = "white", width = 505, height = 505)

    pausedtext = pausedisplay.create_text(253,100, font = "Oswald 84 bold underline", fill = "white", text = "Paused")
    resumetext = pausedisplay.create_text(253,225, font = "Oswald 48 bold", fill = "white", text = "Resume")
    restarttext = pausedisplay.create_text(253,300, font = "Oswald 48 bold", fill = "white", text = "Restart")
    quittext = pausedisplay.create_text(253,375, font = "Oswald 48 bold", fill = "white", text = "Quit")

    pausedisplay.tag_bind(resumetext,"<Button-1>", resume)
    pausedisplay.tag_bind(restarttext,"<Button-1>", restart)
    pausedisplay.tag_bind(quittext,"<Button-1>", quit)

    pausedisplay.grid(row = 0, column = 0)

NameError: глобальное имя pausedisplay не определено

1 Ответ

0 голосов
/ 18 июня 2019

Вы можете определить pausedisplay как глобальную переменную, добавив global pausedisplay внутри pause():

def pause(event):
    global pausedisplay
    ...

или передав pausedisplay в resume(...), restart(...) и т. Д .:

def resume(event, pausedisplay):
    pausedisplay.destroy()

def pause(event):
    ....
    pausedisplay.tag_bind(resumetext, "<Button-1>", lambda e: resume(e, pausedisplay))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...