为了账号安全,请及时绑定邮箱和手机立即绑定

Tkinter 回调 Traceback 错误中的异常。如何处理

Tkinter 回调 Traceback 错误中的异常。如何处理

慕容3067478 2022-06-22 17:49:20
这是一个使用 tkinter gui 添加 2 个数字的小型 Python 程序。如果文本字段中有一些输入,它运行良好。如果输入为空白或数字以外的字符,如何处理导致的错误。from tkinter import *root = Tk()class addtwo:    def evaluate(self, master, label, a, b):        label.configure(text="The result is" + str(a+b))    def __init__(self, master):        frame = Frame(master, width=300, height=200)        button1 = Button(master, text="Sum")        input1 = Entry(master, text="Text1")        input2 = Entry(master, text="Text2")        label = Label(master, text="")        button1.bind("<Button-1>", lambda event: self.evaluate(master, label,int(input1.get()),int(input2.get()) ))        input1.pack()        input2.pack()        frame.focus()        button1.pack()        label.pack()        frame.pack()addtwo(root)   root.mainloop()错误:Exception in Tkinter callbackTraceback (most recent call last):  File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__    return self.func(*args)  File "/home/temporary/PycharmProjects/practise/addtwo.py", line 21, in <lambda>    button1.bind("<Button-1>", lambda event: self.evaluate(master, label,int(input1.get()),int(input2.get()) ))ValueError: invalid literal for int() with base 10: ''
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

您可以使用try/except捕获错误并显示一些消息Label而不是结果。


import tkinter as tk


class AddTwo:


    def __init__(self, master):

        frame = tk.Frame(master, width=300, height=200)


        self.input1 = tk.Entry(master, text="Text1")

        self.input2 = tk.Entry(master, text="Text2")

        button1 = tk.Button(master, text="Sum", command=self.evaluate)

        self.label = tk.Label(master, text="")


        self.input1.pack()

        self.input2.pack()

        button1.pack()

        self.label.pack()

        frame.pack()

        frame.focus()


    def evaluate(self):

        a_str = self.input1.get()

        b_str = self.input2.get()

        try:

            a = int(a_str)

            b = int(b_str)

        except ValueError:

            self.label['text'] = "Wrong value(s) {} and/or {}".format(a_str, b_str)

            return


        self.label['text'] = "The result is {}".format(a+b)


# --- main ---


root = tk.Tk()

AddTwo(root)

root.mainloop()


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 304 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信