2017-12-03 1 views
1

의 내부 항목에서의 작업을 perfoming 없습니다.유효성 검사 명령이 코드는 validate 명령을 perfoming되지 않는 이유 이해가 안 프레임

import tkinter as tk 

root = tk.Tk() 
canvas = tk.Canvas(root, bg="red") 
canvas.grid() 

frame = tk.Frame(canvas) 
canvas.create_window((0,0), window=frame, anchor="nw") 
txt = ["1", "2"] 

def get_data(): 
    print("AAAA") 
    return False 

for i in range(2): 
    t = tk.StringVar() 
    t.set(txt[i])  
    e = tk.Entry(frame, validate="focusin", textvariable = t, state="readonly", validatecommand=get_data) 
    e.grid(row=i) 

root.mainloop() 

이 두 가지 문제로 나타납니다

  1. 유효성 검사 명령은 한 번 항목 (전혀 역할을하지 않아야) 선언 된 곳 역할을하고, 그 입력 람다를 처리 할 수 ​​있습니다 get_data를

  2. 항목은 그 후 "하는 focusIn"에 응답하지 않습니다.

큰 프로젝트를 작성하고이 샘플을 가능한 단순하게 만들었습니다.

감사합니다. 정규 tcl/tk documentation에서

+0

은 나를 위해 작동합니다. – furas

+0

나는'state = "readonly"'를 제거 할 때'textvariable ='으로 나를 위해 일한다. – furas

+1

왜 읽기 전용 위젯에서 유효성 검사를 사용하고 있습니까? 그건 말이 안돼. 내가 말한 –

답변

0

: 일반적으로

의하면 textVariable 및 validateCommand 믹스에 위험 할 수는 ... 위험은 당신이 validateCommand 수락하지 않을 것을, 로하면 textVariable을 설정하려고 할 때 오는 validate가 없음이됩니다 (invalidCommand가 트리거되지 않습니다). validateCommand를 평가하는 중에 오류가 발생하는 경우도 마찬가지입니다. 유효성 검사 명령은 항상 False 반환하기 때문에하면 textVariable의 값이 무효로 간주되기 때문에

는 유효성 검사 명령이 None로 설정됩니다. 나는`하면 textVariable =`를 사용하지 않는 경우

+0

에 대한 그 질문에 대답하는 명령이 있습니다, 포커스가있는 항목 알아야 할, 나는 validatecommand에서 사실이 아닌 거짓으로 return 문을 변경했습니다. –

관련 문제