Rh4751 2023-11-13 01:11 采纳率: 63.6%
浏览 5

为什么age,height及weight输入字符时无弹窗提示错误


from tkinter import messagebox

def validate_age(age):    
    try:    
        age = int(age)    
        if age < 0 or not isinstance(age, int):    
            messagebox.showerror("输入错误", "请输入有效的年龄(正整数)。")    
            return False    
        else:    
            return True    
    except ValueError:    
        messagebox.showerror("输入错误", "请输入有效的年龄(正整数)。")    
        return False  
                    
def validate_measurements(height, weight):  
    if not isinstance(height, (int, float)) or height <= 0:    
        return False   
    if not isinstance(weight, (int, float)) or weight <= 0:    
        return False   
    return True  
    

def check_parameters(age,height,weight): 
    try: 
        if not validate_age(age):  
            messagebox.showerror("输入错误", "请输入正整数作为年龄。")  
            return False  
    
        if not validate_measurements(height,weight):  
            messagebox.showerror("输入错误", "请输入正数作为所有的测量值。")  
            return False  
        return True  
    except ValueError as e:  # 捕获异常并显示错误消息弹窗  
        messagebox.showerror("输入错误", str(e))  # 显示相应的错误消息弹窗
        print(e)  
        return False  # 返回 False 表示参数验证未通过,阻止程序的继续执行
    
def main():
    name=input('姓名')
    age = int(input('年龄') ) 
    height = float(input('身高'))   
    weight = float(input('体重'))  


    try: 
        if not check_parameters(age,height,weight):
            print("参数校验未通过,终止计算!")
            return None
        print("参数校验通过!")  
    except ValueError as e:
        print("参数校验未通过:", e)
        return None 
    
    print(age)
    print(height)
    print(weight)
    
main()

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-13 04:08
    关注

    【以下回答由 GPT 生成】

    问题的根本是因为使用了messagebox.showerror的函数,但是没有使用图形界面库来创建一个GUI窗口,导致无法弹出错误消息框。为了解决这个问题,你可以使用tkinter图形界面库来创建一个GUI窗口,并在窗口中显示错误消息。以下是对你的代码进行优化的解决方案:

    首先,确保你的系统安装了tkinter库。如果没有安装,可以使用以下命令进行安装:

    pip install tkinter
    

    然后,对你的代码进行修改:

    import tkinter as tk
    from tkinter import messagebox
    
    # 创建一个主窗口
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
    
    def validate_age(age):
        try:
            age = int(age)
            if age < 0 or not isinstance(age, int):
                messagebox.showerror("输入错误", "请输入有效的年龄(正整数)。")
                return False
            else:
                return True
        except ValueError:
            messagebox.showerror("输入错误", "请输入有效的年龄(正整数)。")
            return False
    
    def validate_measurements(height, weight):
        if not isinstance(height, (int, float)) or height <= 0:    
            return False   
        if not isinstance(weight, (int, float)) or weight <= 0:    
            return False   
        return True  
    
    def check_parameters(age, height, weight): 
        try: 
            if not validate_age(age):  
                messagebox.showerror("输入错误", "请输入正整数作为年龄。")  
                return False  
    
            if not validate_measurements(height, weight):  
                messagebox.showerror("输入错误", "请输入正数作为所有的测量值。")  
                return False  
            return True  
        except ValueError as e:
            messagebox.showerror("输入错误", str(e))
            print(e)
    

    在上面的代码中,我们首先创建了一个主窗口root并使用root.withdraw()函数隐藏它,这样在创建弹窗时不会出现两个窗口。然后,我们导入tkintermessagebox并使用messagebox.showerror函数来创建错误提示框,并在其中显示错误消息。

    这样,当输入的年龄、身高或体重参数无效时,会弹出一个错误提示框来及时提醒用户。同时,我们也在控制台输出了错误消息,方便进行调试。

    希望以上解决方案能够帮到你,如果你需要进一步的帮助,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月13日

悬赏问题

  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥15 clion的参数提示怎么关闭
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀
  • ¥15 mifare plus卡认证