2014-09-22 4 views
0

我已經構建了一個wxTextCtrl並希望返回true,如果只有用戶輸入的數字。wxTextCtrl代碼來檢測只有在Python中的數字

這裏是我的Python代碼:

@staticmethod  
def isAllDigits(s): 

    for char in list(s): 
     if not char.isdigit(): 
      return False 
     else: 
      break 
    return True 

而且我的代碼調用isAllDigits:

 if self.firstNum.IsEmpty() or not self.isAllDigits(self.firstNum.GetValue()): 
     self.dataInputIsValid = False 
     msgStr = "Your first number is invalid, please enter only enter digits and do not leave the field blank." 
     wx.MessageBox(msgStr) 

    if self.secondNum.IsEmpty() or not self.isAllDigits(self.secondNum.GetValue()): 
     self.dataInputIsValid = False 
     msgStr = "Your second number is invalid, please enter only enter digits and do not leave the field blank." 
     wx.MessageBox(msgStr) 

出於某種原因,我isAllDigits方法並不只檢測數字。例如,如果我要在textCtrl中輸入「3k5」,我的程序將返回「3k5」是全部數字並且是有效的,這是不正確的。

我的isAllDigits方法有什麼問題?

+1

刪除else break – 2014-09-22 03:27:53

回答

1

你可以做這樣

@staticmethod  
def isAllDigits(s): 
    s=s.split('.') 
    if len(s)>2: 
     return false 

    return all(s.isdigit() for char in s) 

或在你的方法刪除else .. break部分

+0

這很好用!此外,如果我輸入「3.4」,則上面的代碼會將小數檢測爲非數字。我怎麼能在小數的例外代碼?乾杯 – 2014-09-22 03:47:47

+0

@PhilipMcQuitty嘗試將它們轉換爲整數。如果他們不轉換他們是非數字使用嘗試:f = int(s)重新運行,除了︰return false – 2014-09-22 04:23:55

+0

我應該把它作爲我的isAllDigits方法的一部分嗎? – 2014-09-22 04:28:37

0

這種嘗試......除了工作,我對PyQt4的QLineEdit的

def textBoxNumbersOnly(QlineEdit): 
    if QlineEdit.text()!="-" and QlineEdit.text()!="+": 
     try: 
      float(QlineEdit.text()) 
     except ValueError: 
      QlineEdit.setText(QlineEdit.text()[:-1]) 
      QlineEdit.setCursorPosition = len(QlineEdit.text()) 
    pass 

它不會拋出如果以' - '或'+'開頭,則爲例外。它允許浮動;不允許出現諸如「3.14.14」之類的錯誤。它省略了錯誤的字符並將光標移動到行的末尾。您可能需要調整它以適用於您的應用程序。