【Maya】PySideで入力されたキーを取得して表示する

PySideでキー入力イベントを受けるためには、以下のようにkeyPressEventを実装します。

    def keyPressEvent(self, event):
        if event.isAutoRepeat():
            return

        pressed = event.key()
        print(pressed == QtCore.Qt.Key_Left)

こんな感じで押されたキーが何であるか判定するだけならこれでいいんですけど、ここでいうところのpressed変数は人が理解するには難しい値が返ってきます。

というわけでヒューマンリーダブルな感じにするにはどうしたらよいかというと、QtGui.QKeySequenceを使います。

具体的にはこう。

    def keyPressEvent(self, event):
        if event.isAutoRepeat():
            return

        pressed = QtGui.QKeySequence(event.key()).toString()
        print(pressed)

これで例えば左キーを押した場合は「Left」、Aキーを押したときは「A」が返ってきます。
他にも問題はないかなーと言うことで、Macで色んなキーを押してみます。

f:id:tm8r:20171201193914p:plain

ファッ。

なんか謎の文字が返ってきたので焦らずリファレンスを見てみるとtoStringには任意の引数があるようなので、デフォルトと異なる「QKeySequence::NativeText」を指定してみます。

    def keyPressEvent(self, event):
        if event.isAutoRepeat():
            return

        pressed = QtGui.QKeySequence(event.key()).toString(QtGui.QKeySequence.NativeText)
        print(pressed)


f:id:tm8r:20171201194443p:plain

わーいできたよー。

というわけでこれを活用すると、こんな感じのコナミコマンド入力UIがMayaで実現できます。やったぜ。
f:id:tm8r:20171201194615g:plain

スポンサーリンク