2011-07-06 2 views
0

FocusOut 이벤트가 Linux에서 작동하지 않는 이유를 알고 계십니까?Linux에서 Tcl/Tk 위젯과 FocusOut이 예상대로 작동하지 않음

활성화 된 텍스트 상자 1 개와 비활성화 된 3 개의 콤보 박스가 있습니다. 텍스트 상자를 3 개의 콤보 박스를 활성화 또는 비활성화하는 proc를 호출하는 FocusOut 이벤트로 바인딩합니다.

Windows에서 완벽하게 작동합니다. 그러나이 작업이 Linux에서 수행되면 FocusOut 이벤트가 트리거되지 않는 것 같습니다. 하나의 이상한 점은 버튼을 클릭하면 FocusOut 이벤트가 트리거되는 것입니다.

내 콤보 박스가 비활성화되어있을 수 있습니까? 하지만 Windows에서 작동하는 이유는 무엇입니까?

정말 누군가가 나를 도울 수 있기를 바랍니다.

미리 감사드립니다.

+0

명확히하기 위해 - 포커스 (키보드가 텍스트를 보내는 곳) 또는 커서가 위젯 위에 있는지 여부에 대해 정말로 염려합니까? ''이벤트를 트리거하기 위해 무엇을하고 있습니까? 탭 키에 대한 특수 바인딩, 다른 항목이나 텍스트 위젯을 클릭하십시오 ...? 텍스트 위젯이나 입력 위젯 ('텍스트 상자'라는 위젯이 없음)에 대해 이야기하고 있습니까? –

+0

사용자가 입력 위젯의 일부 입력 후에 콤보 박스 또는 텍스트 위젯을 클릭 할 때 걱정됩니다. 따라서 나는 이벤트를 사용하고 있습니다. – Mich

답변

1

과거에는 일부 창 관리자가 각 단추를 클릭하기 전에 Tk에서 일시적으로 초점을 훔쳐 보았습니다. 나는이 사건이 주요 사건 처리 방식과 관련이 있다고 생각하지만, 지금은 확인할 수 없다. (OSX에있는 것 때문에 은 다른). 복잡한 문제로 인해 <FocusOut>에 바인딩하는 경우 잠시 후 <FocusIn> 이벤트가 발생하는지 확인해야합니다. 버튼의 비활성화 상태를 업데이트하기 전에 약간의 추가 지연 (예 : 0.1 초)이 발생하지 않습니다.

또는 당신은 아마도이처럼 entry widget validation engine을 해제 할 코드를 걸 수 :

.e configure -validation focusout -validatecommand doButtonEnableDisable 

검증 인터페이스는 이전 스타일 entry과 새로운 스타일 ttk::entry 위젯 모두 동일합니다. 스핀 박스에서도 지원됩니다. doButtonEnableDisable에서 true를 반환해야하거나 항목의 변경을 거부해야하므로 코드에서 오류가 발생하지 않도록하거나 자체를 사용하지 않도록주의해야합니다. 문서는 조심해야 할 것들을 나열합니다.

+0

두 번째 제안을 시도했지만 슬프게도 리눅스에서도 작동하지 않습니다. 내 입력 위젯을 에 바인딩 할 때와 동일하게 작동합니다. 반면에, 이 내 입력 장치에 바인딩되면, 호출하고자하는 proc를 호출합니다. 그 이유는 무엇입니까? 감사합니다. =) – Mich

관련 문제