2014-11-23 6 views
1

X11의 글로벌 단축키를 처리 할 때 QThread (pyside)을 사용하고 있습니다.xlib의 next_event()를 깨는 법?

while self.doRun:     
     event=root.display.next_event() 
     if event.type==X.KeyPress: 
     .... 

그러나 next_event()가 실제 이벤트를 기다리고 알려져있다 : 루프처럼 보이는 동안 나는 몇 가지 간단한있다. 그렇다면 다른 키 입력을 기다리지 않고 루프를 멈추게하려면 어떻게해야합니까? Xlib을 통해 keypress로 가짜 이벤트를 보내는 것에 대해 생각하고 있었지만 올바른 방법이라고 생각하지 않습니다.

Fatal Python error: This thread state must be current when releasing

모든 아이디어 : 그것은으로 전체 응용 프로그램을 충돌 pyside와 또한 해당 이벤트에 .terminate()은 ... 옵션을 선택하지 않습니다?

답변

0

닫기 이벤트 (X11 a destroy event 아마도?)를 더 명확하게 보낼 수 있습니다. 또 다른 아이디어는 첫째를 보류하고있는 이벤트가 있는지 확인하는 것입니다 :

if root.display.pending_events(): 
    event = root.display.next_event() 
    # process event 

그러나이 busy-waiting 구성, 그래서 첫 번째 옵션 갈 것입니다.

+0

필자는 'pending_events'를 이미 시도했지만 앱 성능에는 좋지 않을 것으로 예상했습니다. 수면을 추가하면 (심지어 바보 같은 경우) 더 악화됩니다. 닫기 이벤트를 보내는 방법에 대한 몇 가지 예가 있습니까? 어떻게 든 그것을 등록해야합니까? 나는 그것에 대한 많은 정보를 찾지 못했습니다 ... – middleofdreams

+0

@middleofdreams 그래, Qt의 바인딩에 대한 문서는 아주 희소합니다. 나는 당신이 [적절한 이벤트 유형] (http://pyside.github.io/docs/pyside/PySide/QtCore/)을 사용하여 시뮬레이션 된 키 누르기 이벤트와 동일한 방식으로이 이벤트를 보낼 수 있어야한다고 생각합니다. QEvent.html # PySide.QtCore.PySide.QtCore.QEvent.Type). 또한 네이티브 Qt의 문서를 체크 아웃 할 수도 있습니다 - 더 많은 정보가 포함되어 있으며 대부분이 Qt의 바인딩에도 적용됩니다. – BartoszKP

+0

OK Xlib 이벤트에 대해 이야기하고 있다고 생각했습니다 ... 사실 QThread의 닫기 이벤트는 내가 원하는 것처럼 작동하지 않습니다. – middleofdreams