编辑; tkinter重量转换器

时间:2012-10-28 23:03:37

标签: python tkinter

如果我输入一个整数,我将无效。如果它不是数字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)

1 个答案:

答案 0 :(得分: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时,它也会生成异常,因此您可能也想要更正它。