Ошибка говорит, что мое новое окно, которое было создано приглашением кнопки, не определено, когда я пытаюсь добавить Метку - PullRequest
0 голосов
/ 08 января 2020

Я делаю игру про покемонов для школы. Сначала у меня появляется стартовый экран игры, называемый логином, и на этом экране пользователь должен нажать кнопку, и нажатие этой кнопки вызывает создание нового меню окна и закрытие старого экрана входа. Это происходит, но в основном коде из play (): функция, когда я пытаюсь добавить метку изображения в новое экранное меню, оно говорит, что меню не определено. Если кто-то может помочь, это будет очень ценно. Мое намерение состоит в том, чтобы не использовать классы, так как мы еще не изучили это в классе далеко.

from tkinter import *
from tkinter import messagebox

login = Tk()
login.title("Pokemon")
login.geometry('1000x750')
login.resizable(False, False)

background_image=PhotoImage(file='background.png')
background_label = Label(login, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

title = PhotoImage(file='title.png')

lbl = Label(login, image = title)
lbl.place(x=25, y=20)

messagebox.showinfo('WELCOME TO MY POKEMON GAME', 'HOPE YOU HAVE A GREAT TIME :)')

def play():
    global menu
    global login
    menu = Tk()
    menu.title("Pokemon Main Menu")
    menu.geometry('1000x750')
    menu.resizable(False, False)
    login.destroy()

begin= PhotoImage(file='begin.png')


btn = Button(login, image=begin, command = play)
btn.place(x=75, y=300)

background_image2=PhotoImage(file='background2.png')
background_label2 = Label(menu, image=background_image2)
background_label2.place(x=0, y=0, relwidth=1, relheight=1)


menu.mainloop()
login.mainloop()

Вот ошибка, которую я продолжаю получать Получение

 Traceback (most recent call last):
  File "/Users/ishaan/Desktop/attachments/Pokemon.py", line 39, in <module>
    background_label2 = Label(menu, image=background_image2)
NameError: name 'menu' is not defined

1 Ответ

0 голосов
/ 08 января 2020

Ваша проблема - неправильные отступы.

Вы должны создать метку внутри play(), но вы делаете это вне play(), поэтому она выполняется при запуске, а не при нажатии кнопки, поэтому она пытается добавить метку до того, как создаст menu

from tkinter import *
from tkinter import messagebox

#--- functions ---

def play():
    global menu
    global login

    login.destroy()

    menu = Tk()
    menu.title("Pokemon Main Menu")
    menu.geometry('1000x750')
    menu.resizable(False, False)

    background_image2 = PhotoImage(file='background2.png')
    background_label2 = Label(menu, image=background_image2)
    background_label2.place(x=0, y=0, relwidth=1, relheight=1)

    menu.mainloop()

# --- main ---

login = Tk()
login.title("Pokemon")
login.geometry('1000x750')
login.resizable(False, False)

background_image = PhotoImage(file='background.png')
background_label = Label(login, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

title = PhotoImage(file='title.png')
lbl = Label(login, image=title)
lbl.place(x=25, y=20)

btn = Button(login, command=play)
btn.place(x=75, y=300)

messagebox.showinfo('WELCOME TO MY POKEMON GAME', 'HOPE YOU HAVE A GREAT TIME :)')

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