python - 错误说当我尝试添加标签时由按钮提示创建的新窗口未定义
问题描述
我正在为学校制作口袋妖怪游戏。首先,我有一个名为登录的开始游戏屏幕,用户必须从这个屏幕按下按钮,按下该按钮会触发一个新的窗口菜单被创建并关闭旧的登录屏幕。发生这种情况,但是在 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
解决方案
你的问题是错误的缩进。
您必须在内部创建标签,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()
推荐阅读
- python - python3删除变量中的行
- javascript - 使用 React Query 和 NextAuth 登录后经过身份验证的请求
- pyspark - 在 PySpark 中将字符串类型(MM/dd/YYYY hh:mm:ss AM/PM)转换为日期格式?
- r - 将包含网络节点度的列添加到数据帧
- docker - 在 Docker 容器内 Kubectl 给出 Unable to connect to the server: dial tcp i/o timeout
- angular - ng-autocomplete,选择项目时如何重新打开面板?
- firebase - 为什么 RemoteConfig 参数里面的 fetch 百分比这么小?
- networking - 无法在 Mac 上访问 www.google.com
- python - 匀称多边形到二进制掩码
- linux - 如何在一行中将命令行参数传递给shell命令