필자는 tkinter 파이썬과 함께 8 정수와 2 소수점을 갖는 float 필드를 받아들이 기위한 입력 필드를 정의했다. 포맷 8.2를 준수하지 않는다면 에러 메시지를 표시한다. 이 입력란의 형식을 정의하는 데 도움을받을 수 있습니다.엔트리는 float만을 받아 들인다. 8,2
답변
Entry이 또한 A Validating Entry Widget
입니다 그러나 당신은 또한 바인딩 이벤트 <KeyRelease>
당신이 항목의 값을 확인하는 데 사용할 수있는 기능을 수행 할 수 있습니다 Interactively validating Entry widget content in tkinter
에 당신이 볼 수있는 옵션 validate=
및 validatecommand=
있습니다.
도트를 사용하여 텍스트를 분할했습니다. 2 개 이상의 부품을 얻으면 2 개의 점이 더 많습니다.
그 다음에는 두 번째 부분이 있는지, 비어 있지 않은지, 숫자 만 있고 8자를 넘지 않는지 확인합니다. 첫 번째 부분을 확인하는 것과 비슷한 방법입니다.
문자열이 유효하지 않은 경우 콘솔에서 메시지 만 인쇄하지만 더 많은 작업을 수행 할 수 있습니다. 메시지 상자를 표시하거나 텍스트를 바꿀 수 있습니다. Entry
.
import tkinter as tk
def check(event):
text = event.widget.get()
print('text:', text)
parts = text.split('.')
parts_number = len(parts)
if parts_number > 2:
print('too much dots')
if parts_number > 1 and parts[1]: # don't check empty string
if not parts[1].isdecimal() or len(parts[1]) > 2:
print('wrong second part')
if parts_number > 0 and parts[0]: # don't check empty string
if not parts[0].isdecimal() or len(parts[0]) > 8:
print('wrong first part')
root = tk.Tk()
e = tk.Entry(root)
e.pack()
e.bind('<KeyRelease>', check)
root.mainloop()
EDIT : validate=
와 예 - 상기 제 2 링크의 예에 기초하여.
기능 check()
대부분 변경되지 않았습니다. 메시지를 인쇄하는 대신 return True/False
만 사용합니다. 잘못된 값을 차단합니다.
import tkinter as tk
def check(d, i, P, s, S, v, V, W):
#print("d='%s'" % d)
#print("i='%s'" % i)
#print("P='%s'" % P)
#print("s='%s'" % s)
#print("S='%s'" % S)
#print("v='%s'" % v)
#print("V='%s'" % V)
#print("W='%s'" % W)
text = P #e.get()
print('text:', text)
parts = text.split('.')
parts_number = len(parts)
if parts_number > 2:
#print('too much dots')
return False
if parts_number > 1 and parts[1]: # don't check empty string
if not parts[1].isdecimal() or len(parts[1]) > 2:
#print('wrong second part')
return False
if parts_number > 0 and parts[0]: # don't check empty string
if not parts[0].isdecimal() or len(parts[0]) > 8:
#print('wrong first part')
return False
return True
# --- main ---
root = tk.Tk()
vcmd = (root.register(check), '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
e = tk.Entry(root, validate='key', validatecommand=vcmd)
e.pack()
root.mainloop()
도움을 주셔서 감사합니다.하지만 그건 내가 원한 것이 아닙니다. 실제로는 최대 8 개의 정수와 2 개의 소수점이있는 숫자 전용 필드를 삽입 할 수 있어야합니다. 영문자를 입력 할 수 없습니다. 실제로 필드의 출구에 12352.45를 입력하면 형식은 12.352,45가됩니다. – pdecaro
새로운 문자가 숫자가 아닌 경우 항상 입력 텍스트를 바꿀 수 있습니다. 'validatecommand ='를 사용하여 일부 키를 차단하려고 할 수도 있습니다. 그러나 문자열에 올바른 형식이 있는지 수동으로 확인해야합니다. 예를 들어 비슷한 경우 또는 정규식을 사용하여 형식을 검사 할 수 있습니다. – furas
'validate =' – furas
- 1. 목록에있는 값을 받아 들인다.
- 2. 함수에서 인자로 모든 타입을 받아 들인다.
- 3. Doctrine Repository가 getAll을위한 배열을 받아 들인다
- 4. 잠시 동안 사용자 입력을 받아 들인다.
- 5. umbraco의 tinymce가 html 5 표준을 받아 들인다.
- 6. RxJS - 관측 가능한 마지막 원소를 받아 들인다.
- 7. 콘솔에서 루비 스크립트가 완료 될 때까지 입력을 계속 받아 들인다.
- 8. jQuery 동안 PHP 스크립트 페이지로 데이터를 보내고 데이터를로드하고 받아 들인다.
- 9. Haskell Network는 지원되지 않는 작업을 "받아 들인다"(기능이 구현되지 않음)
- 10. @RequestMapping이 동일한 두 개의 다른 서브 클래스를 받아 들인다.
- 11. 사용자로부터 많은 입력을 받아 파일 이름, 디렉토리, 다른 입력과 같은 문자열로 받아 들인다.
- 12. 필자는 파이썬 함수를 사용하여 행을 반복한다. 문자열이나 파일과 같은 객체를 받아 들인다.
- 13. PHP : 하나의 서버가 텍스트 뒤에 헤더를 받아 들인다. 다른 하나는 그렇지 않다.
- 14. 파이썬은 파일로부터 클래스 데이터 멤버를 읽어 들인다.
- 15. Numpy가 '.npy'파일의 데이터를 배열로 직접 읽어 들인다.
- 16. 유닉스에서 특정 길이의 파일을 읽어 들인다.
- 17. mysqli 준비 문을 배열로 읽어 들인다.
- 18. 두 equatable 값을 비교 - "에 대한 과부하를 찾을 수 없습니다 '=='제공된 인수 받아 들인다"나는 또한 시도
- 19. 이메일을 받아 보시려면 자바
- 20. 파이썬 목록의 목록을 받아
- 21. MongoDB가 스트레스를 받아 추락했습니다.
- 22. 장고 받아 GET 매개 변수
- 23. mp4Parser의 도움을 받아 비디오 다듬기
- 24. FQL 앨범의 모든 사진을 받아
- 25. Linq가 별개이고 주문을 받아 들여
- 26. PostgreSQL을 늘 받아 원격 연결
- 27. AVFoundation 노래의 앨범 이미지를 받아
- 28. enum VB.NET의 도움을 받아 설정하기
- 29. 사용자로부터 입력 받아 데이터베이스에 쿼리하십시오.
- 30. 배열을 매개 변수로 받아 들여야합니다.
당신은 8 자리 숫자 **와 2 자리수를 의미합니까? – Pac0
문자열을 얻고 점을 사용하여 분할 한 다음 두 부분의 길이와 자릿수를 모두 확인할 수 있습니다. – furas
Stack Overflow에 오신 것을 환영합니다. 게시하기 전에 문제를 검색해보십시오. tkinter의 기본 유효성 검사에 대해서는 https://stackoverflow.com/questions/1018729/python-tkinter-text-entry-validation을 참조하십시오. 그리고 https://stackoverflow.com/questions/8579267/validating-a-text-field-containing-a-float-is-a-valid-percentage-value는 검증 로직을 시작하는 좋은 출발점이 될 것입니다. – weirdev