2012-10-28 19 views
0

如果我輸入一個整數我變得無效。如果它不是數字0或更大,我希望它無效。任何幫助非常感謝!編輯; tkinter權重轉換器

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) 

回答

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它也將產生一個異常,所以你可能要糾正這一點。

+0

當我嘗試這個時,我輸入一個數字,如果我輸入一個字母什麼也沒有顯示出來,我無效。但它確實無效,如果它是一個好的負數 – user1733141

+0

你想要什麼類型的數字?如果你使用整數它應該工作,但像22.8或0.43浮動將失敗,因爲這些字符串不會正確地投入整數。 – 2012-10-28 23:53:24

+0

整數,但生病編輯和重新顯示你我的代碼 – user1733141