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で色んなキーを押してみます。
ファッ。
なんか謎の文字が返ってきたので焦らずリファレンスを見てみるとtoStringには任意の引数があるようなので、デフォルトと異なる「QKeySequence::NativeText」を指定してみます。
def keyPressEvent(self, event): if event.isAutoRepeat(): return pressed = QtGui.QKeySequence(event.key()).toString(QtGui.QKeySequence.NativeText) print(pressed)
わーいできたよー。
というわけでこれを活用すると、こんな感じのコナミコマンド入力UIがMayaで実現できます。やったぜ。