2012-11-19 2 views
0

이 주제에 대한 많은 정보를 보았지만 정확히이 질문에 대한 답변이 아닙니다. 나는 대부분의 반대 문제가 있습니다. 단추에 포커스가있을 때 Enter 단추가 단추를 누르는 것을 막고 싶습니다. 그리고 이렇게하기 위해, 단순히 버튼이 Enter 버튼 누르기를 수락하지 못하도록하고 싶지는 않지만 콜백 메소드에서 Enter 버튼을 조건부로 캡처하려고합니다. 지금, 내 파이썬 프로그램에서 모든 위젯에 다음과 같은 이벤트를 바인딩 한 다음 입력 버튼을 누를 때 나는 내 콜백 메소드에 콜백을 얻을 수 있어요 때wxPython Enter Button 이벤트

parent.Bind(wx.EVT_CHAR, self.CharInputCallback) 

EVT_CHAR 이벤트가 실제로 발생합니다. 내 문제는 의도적으로 이벤트를 건너 뛰지는 않았지만 사실상 버튼을 클릭하는 입력 버튼의 기능이 여전히 진행된다는 것입니다 (이벤트 전달). 이 일이 일어나고 내 콜백 메서드를 통해 이벤트를 전달하지 확신합니다 (나는 텍스트 상자에 문자를 캡처하여 이것을 테스트했습니다) 나는 입력 단추가 캡처하지 않는 추가 이벤트를 throw합니다 용의자 . 나는 바인딩하고 입력 버튼의 "가상 클릭"을 방지하기 위해 추가로 다음과 같은 이벤트를 캡처 해봤 :

parent.Bind(wx.EVT_TEXT_ENTER, self.CharInputCallback) 
parent.Bind(wx.EVT_KEY_UP, self.CharInputCallback) 
parent.Bind(wx.EVT_KEY_DOWN, self.CharInputCallback) 

을하지만 내가 초점 버튼을 계속 클릭, Enter 키를 누르면. 요약하면 입력 버튼을 누르면 추가 이벤트가 발생합니까? 그렇다면 어떤 이벤트가 특히 "가상 클릭"하는 것입니까? 내가 찾은 포럼 중 대부분은 입력 버튼을 눌렀을 때를 인식하는 방법에 대해 논의했지만 버튼이 집중되어있을 때이를 인식하고 비활성화하려고합니다.

답변

0

모든 이벤트를 다른 핸들러로 바인딩하려고 시도했으며 EVT_BUTTON도 바인딩했습니다. EVT_BUTTON은 키와 char 이벤트가 발생하기 전에 항상 발생합니다. 버튼을 클릭하지 않으려면 사용을 중지하거나 다른 도구 (일반 버튼 중 하나 일 수도 있음)를 사용하거나 나만의 버튼을 만들어야합니다. wxPython 메일 링리스트에 제안 사항이 있는지 확인해달라고 요청할 것입니다.

내가 알고있는 wxPython의 이벤트를 정렬하는 유일한 방법은 wx.CallAfter 또는 wx.CallLater를 사용하는 것입니다. 그래도이 컨텍스트에서 어떻게 사용할지 모르겠습니다.

+0

키 업 이벤트가 버튼 클릭을 유발 한 이벤트임을 알게되었습니다. 또는 결국 버튼 클릭으로 이어졌습니다. 캡쳐하여 키 업 이벤트를 건너 뛰지 않아서 입력 버튼이 포커스가있는 버튼을 클릭하는 것을 방지 할 수있었습니다. 흥미롭게도, 이전에 언급 한 모든 이벤트를 바인딩 할 때 몇 가지 문제가있었습니다. 현재 EVT_CHAR 및 KEY_UP 이벤트를 캡처 중입니다. 이것은 트릭을 할 것으로 보인다. – user1777820

+0

허. 이상한. 나는 Windows 7에서 그 동작을 알아 차리지 못했습니다. 어쨌든, 당신이 알아 낸 것을 기쁘게 생각합니다. –

0

enter를 눌러 버튼을 클릭하게하는 이벤트가 키 업 이벤트입니다. 콜백 코드가 약간 엉망이되었습니다. 키 업 이벤트를 캡처하고 건너 뛰지 않으면 입력 버튼이 포커스가있는 버튼을 클릭하지 못합니다. 어쨌든 Windows 7.