2013-06-14 1 views
2

마지막 목표는 [ 1] 키를 어떤 키보드 레이아웃 (qwerty, qwertz, azerty ...)에 관계없이 pyqt의 바로 가기 키로 사용할 수 있습니다. qt가 직접 지원하지 않습니다.순수 키몬의 하드웨어 키 번호/스캔 코드에서 실제 키 이름을 얻는 법 OR : [1]의 왼쪽에있는 키를 Qt의 바로 가기에 바인딩하는 방법

그래서 Qt 문서 (또는 숨겨진 어딘가)에 언급되지 않은 방법을 찾고 있습니다. 아니면 하드웨어 키 번호를 다음으로 변환하여 순수 파이썬으로 키를 사전 처리하는 방법 일 가능성이 높습니다. 프로그램 시작시 현재 레이아웃의 실제 키

pyqt에 실제 키를 제공하거나 다른 툴킷을 사용할 수 있습니다.

한 키의 왼쪽 키에는 때때로 키 번호 "1"이 있습니다 (http://pic.dhe.ibm.com/infocenter/aix/v7r1/index.jsp?topic=%2Fcom.ibm.aix.keyboardtechref%2Fdoc%2Fkybdtech%2FKey.htm 참조).

qt에서이 키를 가로 채고 "nativeScanCode"를 인쇄하면 결과적으로 "49"가됩니다.

그래서 모두 파이썬 전용 솔루션을 선호하지만, Qt 의존도 괜찮습니다.

이유 :이유는 레이아웃과 관련하여 사용하기에 매우 편리한 키이지만 언어에 크게 의존하기 때문입니다. 일부 키보드 언어에서는 구별 부호가있는 문자를 만드는 데 두 번째 키가 필요한 'dead key'조차 있습니다.

직접 테스트하려면 zwerty 및 qwertz를 사용하여 z 및 y 키를 가져와야합니다.이 키는 왼쪽의 키보다 간단한 예이지만 원칙적으로 동일한 문제입니다. 목표는 qwertz 또는 qwerty에 관계없이 항상 키보드의 왼쪽 하단에있는 키로 트리거되는 바로 가기입니다 (이름에서 알 수 있듯이 z와 y의 차이는 z와 y가 반대로되어 있음)

+0

[이 질문에 문제가 발생했습니다 (http://stackoverflow.com/q/3872085/344347). –

+0

죄송 합니다만, 아직받지 못했습니다. 이것은 죽은 열쇠와 관련이 없습니다. 죽은 키는 하나의 추가 레이어를 추가하기 만하면 원래 문제가 해결 될 때까지 생각할 필요가 없습니다. 질문의 마지막 단락에서 z 및 y를 사용할 수있는 자체 테스트를 권장합니다. 이것들은 어떤 레이아웃에서든 비 데드 (non-dead) 키이기 때문에 더 간단합니다. – nilsge

+0

왜 죽은 키와 관련이 없습니까? 우리는 죽은 열쇠에 대해 이야기하고있었습니다. 죽은 키 프레스 이벤트에 바로 가기를 묶으려고하는 거지, 그렇지? –

답변

1

키보드 레이아웃과 별도로 단축키를 구현하려면 위젯의 keyPressEvent을 다시 구현하고 keyEvent.nativeScanCode() 값을 확인해야합니다. 예를 들어, QWERTY 및 QWERTZ에서 'Y'로 'Z'에 할당 된 키를 추적하기 위해, 다음을 사용할 수 있습니다

class MyWidget(QtGui.QWidget): 
     def keyPressEvent(self, event): 
      if event.nativeScanCode() == 52: 
       print "Pressed!" 

주를 무덤 악센트 키가 특별한이다. 일부 레이아웃에서는 죽은 키이므로 일부 시스템에서는 다음 키를 누를 때까지 keyPressEvent가 나타나지 않을 수 있습니다. this question을 참조하십시오.

QShortCut은 QKeySequence를 기반으로하며 QKeySequence는 기본 스캔 코드를 지원하지 않으므로이 작업에서는 QShortCut을 사용할 수 없습니다.

+0

아니요. 바로 가기는 현재 키보드 레이아웃에 따라 다릅니다. 질문을 다시 읽으십시오. 이것은 로케일 독립에 관한 것입니다. – nilsge

+0

실행 해 보셨습니까? 나는 시도했다. 그리고 그것은 나에게 두 개의 다른 레이아웃을 사용하여 잘 동작한다. 또한 QWERTY 레이아웃에서이 키의 기본 문자는 "'"문자입니다. –

+0

예. 나는 심지어 그것을 실행할 수 없습니다. QWERTZ에서 "'"키는 백 스페이스 키 왼쪽으로 시프트 수정자를 가진 죽은 키입니다. 따라서 이것은 일반적인 단축키로도 가능하지 않습니다. 이것은 정확히 문제입니다. 앱에서이 바로 가기를 사용하면 사용하기가 불편하지 않지만 완전한 중남부 유럽에서는 불가능합니다. 결론 : char와 함께 QKeySequence를 사용하면 현재 자판 배열에서이 char를 생성하는 키를 바인딩합니다. – nilsge