You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:54:02