树莓派4 Thonny Python3.9下Tkinter图片程序报jet_image未定义错误求助
错误原因
NameError: name 'jet_image' is not defined的触发逻辑如下:
- 你的代码中仅当输入的编号匹配
00~05时,才会给jet_image变量赋值 - 若输入的编号不在上述范围、也不是退出指令
99999,jet_image全程未被定义,执行到Image.open(jet_image)时就会抛出异常 - 就算输入的是退出指令
99999,执行root.destroy()之后,后续的图片加载逻辑依然会继续执行,也可能触发异常
修复方案
将路径映射改为字典结构简化代码,增加输入校验、退出后直接终止函数执行,修复后的完整代码如下:
# 导入Tkinter GUI库 from tkinter import * # 导入PIL图像处理库 from PIL import ImageTk, Image # 编号与图片路径映射表,新增编号直接修改此字典即可 PATH_MAP = { "00": "/home/pi/Desktop/Jet Orientation Program/Jet Picture Guides/abc1.png", "01": "/home/pi/Desktop/Jet Orientation Program/Jet Picture Guides/abc2.png", "02": "/home/pi/Desktop/Jet Orientation Program/Jet Picture Guides/abc3.png", "03": "/home/pi/Desktop/Jet Orientation Program/Jet Picture Guides/abc4.png", "04": "/home/pi/Desktop/Jet Orientation Program/Jet Picture Guides/abc5.png", "05": "/home/pi/Desktop/Jet Orientation Program/Jet Picture Guides/abc6.png", } def open_jet_image(): global canvas input_code = entry.get().strip() # 处理退出逻辑 if input_code == "99999": root.destroy() return # 非法输入直接拦截,不执行后续图片加载逻辑 if input_code not in PATH_MAP: return jet_image = PATH_MAP[input_code] # 加载显示图片 canvas.delete("all") img = Image.open(jet_image) img = img.resize((1070, 1770), Image.ANTIALIAS) canvas.image = ImageTk.PhotoImage(img) canvas.create_image(0, 0, image = canvas.image, anchor = "nw") canvas.pack() # 清空输入框 def delete(): entry.delete(0, END) # 初始化主窗口 root = Tk() root.title("Jet Orientation Program") root.geometry("1080x1920+0+0") root.resizable(width = True, height = True) # 初始化画布 canvas = Canvas(bg = "white", height = 1770, width = 1060) canvas.pack(fill = "both") # 初始化输入框 entry = Entry(root, width=10, font = "Arial 25", justify = "center") entry.focus_set() entry.pack() # 提交按钮 btn = Button(root, text ='Enter Tub Number', command = lambda:[open_jet_image(), delete()]) btn.pack() # 绑定小键盘回车键 root.bind('<KP_Enter>', lambda event=None: btn.invoke()) root.mainloop()
内容的提问来源于stack exchange,提问作者ripcity123
相关产品推荐
相关产品推荐

