2

私の最終的な目標は、キーボード レイアウト (qwerty、qwertz、azerty...) に関係なく、[1] キーの左側のキーを pyqt のショートカットにバインドすることです。それはqtによって直接サポートされていません。

したがって、Qtドキュメントで言及されていない(またはどこかに隠されている)方法を探しているか、ハードウェアキー番号を実際のキーに変換することにより、その前に純粋なPythonでキーを前処理する方法を探していますプログラム起動時の現在のレイアウト。

次に、実際のキーを pyqt に渡すか、その他のツールキットに渡すことができます。ツールキットは何も知る必要はありません。

ワンキーの左側のキーには、キー番号「1」が付いている場合があります ( http://pic.dhe.ibm.com/infocenter/aix/v7r1/index.jsp?topic=%2Fcom.ibm.aix を参照してください。 keyboardtechref%2Fdoc%2Fkybdtech%2FKey.htm )。

このキーを qt でインターセプトして「nativeScanCode」を出力すると、結果として「49」が得られます。

全体として、私はPythonのみのソリューションを好みますが、Qt依存も問題ありません。

理由: これは (レイアウトに関して) 非常に使いやすいキーですが、言語に大きく依存するためです。一部のキーボード言語では、分音記号付きの文字を作成するために 2 番目のキーを必要とする「デッド キー」でさえあります。

自分でテストしたい場合は、qwerty と qwertz を使用して z キーと y キーを取得するだけです。これは、左のキーよりも単純な例ですが、原則として同じ問題です。目標は、qwertz か qwerty かに関係なく、キーボードの左下隅にあるキーによって常にトリガーされるショートカットです (名前が示すように、これら 2 つの違いは、z と y が逆になっていることです)。

4

1 に答える 1

1

キーボード レイアウトから独立したショートカットを実装する場合keyPressEventは、ウィジェットを再実装してkeyEvent.nativeScanCode()値を確認する必要があります。たとえば、QWERTY の「Z」と QWERTZ の「Y」に割り当てられたキーを追跡するには、次のように使用できます。

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

グラーブ アクセント キーは特殊であることに注意してください。一部のレイアウトではデッド キーです。そのため、一部のシステムでは、次のキーが押されるまで keyPressEvent が表示されない場合があります。この質問を参照してください。

QShortCut は QKeySequence に基づいており、QKeySequence はネイティブ スキャン コードをサポートしていないため、このタスクでは QShortCut を使用できません。

于 2013-06-14T17:08:16.743 に答える