Tkinter回调回溯错误出现异常,如何处理

2024-09-27 07:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个使用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 callback
Traceback (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: ''

Tags: textselfmastergettkinterrootframelabel
1条回答
网友
1楼 · 发布于 2024-09-27 07:33:55

您可以使用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()

相关问题 更多 >

    热门问题