2014-09-22 3 views
0

wxTextCtrl을 구성했으며 사용자가 한 자릿수 만 입력하면 true를 반환하려고합니다. 내 isAllDigits 방법은 숫자 만이 감지되지 않았 어떤 이유wxTextCtrl 파이썬에서만 숫자를 탐지하는 코드

 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) 

:

@staticmethod  
def isAllDigits(s): 

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

그리고 내 코드 isAllDigits를 호출

여기 내 파이썬 코드입니다. 예를 들어, textCtrl에 "3k5"를 입력하면 내 프로그램은 "3k5"가 모든 자릿수이고 올바르지 않은 것을 반환합니다. 이는 잘못된 것입니다.

isAllDigits 메소드의 문제점은 무엇입니까?

+1

else break를 삭제 –

답변

1

당신은 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 

그것은 포기하지 않는 시도

+0

이것은 훌륭했습니다! 또한 "3.4"에 입력하면 위의 코드는 십진수를 비 숫자로 감지합니다. 십진수에 대한 예외 처리는 어떻게합니까? 건배 –

+0

@PhilipMcQuitty 정수로 변환 해보십시오. 그들은 변환하지 않는다면 숫자를 사용하지 않는다. try : f = int (s) retrun true except : return false –

+0

이것을 isAllDigits 메소드의 일부로 두어야 하는가? –

0

else .. break 부분

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

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

또는 방법

제거를 이런 식으로 작업을 수행 할 수 있습니다 '-'또는 '+'로 시작하면 예외입니다. 수레가 허용됩니다. '3.14.14'와 같은 실수를 허용하지 않습니다. 잘못된 문자는 생략하고 커서를 줄 끝으로 이동합니다. 애플리케이션에 맞게 조정해야 할 수도 있습니다.

관련 문제