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

Tkinter退出按钮触发NameError错误,请求技术解决方案

解决方法

原因分析

你用了from tkinter import *的导入方式,这种方式会把tkinter库中的所有公开成员直接导入到当前代码的命名空间,但tkinter模块本身并没有被导入,所以无法通过tkinter.askyesno这种模块前缀的方式调用函数,这就是触发NameError的原因。另外你的代码里还存在一个问题:函数名是iExit,但你又给self.iExit赋值,这会覆盖掉函数的引用,可能导致后续调用出错。

修正方案(两种可选)

方案一:直接使用导入的函数名

既然已经用了from tkinter import *,直接调用askyesno即可,同时修改变量名避免覆盖函数:

from tkinter import*
from tkinter import ttk
from PIL import Image,ImageTk
import os

def iExit(self):
        # 换个变量名,避免和函数名iExit冲突
        exit_confirm = askyesno("Face Recognition","Are you sure you want to exit?")
        if exit_confirm:
            # askyesno返回布尔值True/False,无需和0比较
            self.root.destroy()
        else:
            return 

方案二:修改导入方式,保留模块前缀

如果习惯用模块前缀调用,可以改成导入tkinter模块本身,推荐用别名tk让代码更清晰:

import tkinter as tk
from tkinter import ttk
from PIL import Image,ImageTk
import os

def iExit(self):
        exit_confirm = tk.askyesno("Face Recognition","Are you sure you want to exit?")
        if exit_confirm:
            self.root.destroy()
        else:
            return 

额外说明

askyesno函数返回的是布尔值(点击"是"返回True,"否"返回False),直接用if exit_confirm:判断即可,不需要和0比较,这样代码更易读。

内容的提问来源于stack exchange,提问作者CatJeff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:11:29