필자는 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
당신은 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