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

問題は最初のブール条件です。条件は true と評価されています

>>> '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 に答える