0

如果我输入一个整数,我会变得无效。如果它不是数字 0 或更大,我希望它无效。非常感谢任何帮助!

from Tkinter import *
import tkMessageBox

from Tkinter import *
import tkMessageBox

class MyApp(object):
   def __init__(self):
       self.root = Tk()
       self.root.wm_title("Question 7")
       self.label = Label(self.root, text="Enter weight in pounds",
                       font=('Calibri', 50))
       self.label.pack(padx=20,pady=10)
       self.labeltext = StringVar()
       self.labeltext.set("")
       Label(self.root, textvariable=self.labeltext).pack()
       self.entrytext = StringVar()
       Entry(self.root, textvariable=self.entrytext).pack()
       self.entrytext.trace('w', self.entry_changed)

       self.root.mainloop()



   def entry_changed(self, a, b, c):
        s = self.entrytext.get()
       try:
        a=int(s)*4.3
        self.labeltext.set(a)
4

1 回答 1

0

问题是第一个布尔条件。条件评估为真

>>> 'Not A Number' >= 0
True

但是,当它然后将其转换为整数时,它会失败:

>>> int('Not A Number')
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    int('Not A Number')
ValueError: invalid literal for int() with base 10: 'Not A Number'

试试这个,这样你就可以正确地捕获和管理正在引起的异常:

def entry_changed(self, a, b, c):
    s = self.entrytext.get()
    try:
        a=int(s)*4.3
        self.labeltext.set(a)
    except:
        if s=="":
            self.labeltext.set("")
        else:
            self.labeltext.set("invalid")

请注意,当用户输入浮点数时eg. 4.3,它也会产生异常,因此您可能也想更正它。

于 2012-10-28T23:18:37.337 回答