首页 > 解决方案 > 错误说当我尝试添加标签时由按钮提示创建的新窗口未定义

问题描述

我正在为学校制作口袋妖怪游戏。首先,我有一个名为登录的开始游戏屏幕,用户必须从这个屏幕按下按钮,按下该按钮会触发一个新的窗口菜单被创建并关闭旧的登录屏幕。发生这种情况,但是在 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

标签: pythontkinter

解决方案


你的问题是错误的缩进。

您必须在内部创建标签,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()

推荐阅读