PySide超入門【第18回 | 応用編】クリック・キー・マウス入力を制御する!QMouseEvent・QKeyEvent

\ 迷ったらまずTechAcademyの無料カウンセリング! /

GUIアプリを作るとき、ボタンがクリックされたり、ユーザーがキーボードを打ったり、マウスを動かしたりする ―― これらすべてが「イベント」です。
そして、このユーザー操作に反応する仕組みこそが「イベントハンドリング」です。

たとえば「ボタンを押したら何かを表示したい」「Enterキーが押されたら処理を開始したい」「マウスが上に乗ったときに色を変えたい」といった動きは、すべてイベント処理で実現します。
このイベント処理を自由に操れるようになることで、PySideを使ったインタラクティブで実用的なアプリ開発が一気に加速します。

本記事では、PySideで扱える代表的なイベント(クリック・キー入力・マウス操作)を軸に丁寧に解説します
PySide初心者の方でも安心して読み進められる構成になっていますので、ぜひ最後までご覧ください。

目次

イベントハンドリングとは?(基本コード)

PySideでは、ユーザーの操作(イベント)に対してメソッドをオーバーライドすることで処理を実装できます。以下は基本的なクリック・キー・マウスイベントの処理例です。

基本コード

from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtGui import QMouseEvent, QKeyEvent
from PySide6.QtCore import Qt

class MyWidget(QWidget):
    def mousePressEvent(self, event: QMouseEvent):
        print(f"マウスクリック:{event.pos()}")

    def keyPressEvent(self, event: QKeyEvent):
        print(f"キー入力:{event.key()}")

app = QApplication([])
window = MyWidget()
window.show()
app.exec()

# マウスクリック:PySide6.QtCore.QPoint(392, 93)
# キー入力:83
特になにも表示していません

主なプロパティとメソッド一覧(全解説)

Noメソッド / プロパティ説明
1mousePressEventマウスクリック時の処理を定義def mousePressEvent(self, event):
2mouseMoveEventマウス移動時の処理を定義def mouseMoveEvent(self, event):
3mouseReleaseEventマウスボタン離し時の処理def mouseReleaseEvent(self, event):
4keyPressEventキー入力時の処理を定義def keyPressEvent(self, event):
5keyReleaseEventキー離し時の処理def keyReleaseEvent(self, event):
6enterEventマウスがウィジェットに入ったときの処理def enterEvent(self, event):
7leaveEventマウスがウィジェットから出たときの処理def leaveEvent(self, event):
8eventイベント全体をハンドリングする総合的な方法def event(self, event):

各プロパティ・メソッド 詳細解説

【1】マウスクリックを検出する

概要:マウスクリック時に呼び出されるメソッド
メソッドmousePressEvent(self, event)
使い方

def mousePressEvent(self, event):
    print("マウスが押されました")
    print(f"位置: {event.pos()}")

# マウスが押されました
# 位置: PySide6.QtCore.QPoint(385, 210)

【2】マウスの移動を検出する

概要:マウスが動いたときに呼び出される
メソッドmouseMoveEvent(self, event)
使い方

def mouseMoveEvent(self, event):
    print(f"マウス移動: {event.position()}")

【3】マウスボタンを離したとき

概要:クリック後にボタンを離すと呼ばれる
メソッドmouseReleaseEvent(self, event)
使い方

def mouseReleaseEvent(self, event):
    print("マウスボタンが離されました")
    # マウス移動: PySide6.QtCore.QPointF(204.800000, 201.600000)
    # マウス移動: PySide6.QtCore.QPointF(204.800000, 202.400000)
    # マウス移動: PySide6.QtCore.QPointF(204.800000, 204.000000)
    # マウス移動: PySide6.QtCore.QPointF(204.800000, 204.800000)
    # マウス移動: PySide6.QtCore.QPointF(204.000000, 206.400000)

【4】キーが押されたとき

概要:キーボードのキーが押されたとき
メソッドkeyPressEvent(self, event)
使い方

def keyPressEvent(self, event):
    if event.key() == Qt.Key_A:
        print("Aが押されました")
    # Aが押されました

【5】キーが離されたとき

概要:押していたキーを離したときに呼ばれる
メソッドkeyReleaseEvent(self, event)
使い方

def keyReleaseEvent(self, event):
    print(f"キー離し: {event.key()}")
    # キー離し: 65

【6】マウスがウィジェットに入ったとき

概要:ウィジェットにマウスカーソルが入ったときに呼び出される
メソッドenterEvent(self, event)
使い方

def enterEvent(self, event):
    print("マウスがウィジェットに入りました")
    # マウスがウィジェットに入りました

【7】マウスがウィジェットから出たとき

概要:マウスカーソルが出たときに呼び出される
メソッドleaveEvent(self, event)
使い方

def leaveEvent(self, event):
    print("マウスがウィジェットから出ました")
    # マウスがウィジェットから出ました

【8】イベントの全般処理

概要:任意のイベントを一元管理したいときに使う
メソッドevent(self, event)
使い方

def event(self, event):
    print(f"イベントタイプ: {event.type()}")
    return super().event(event)
    # マウスがウィジェットに入りました
    # イベントタイプ: 173
    # イベントタイプ: 11
    # マウスがウィジェットから出ました

よくある質問(FAQ)

Q1. ボタンクリックとマウスクリックは何が違う?

AQPushButtonclickedシグナルはウィジェット専用、mousePressEventはウィジェット全体で使える。

Q2. マウスの右クリックだけを検出するには?
if event.button() == Qt.RightButton:
    print("右クリック")
Q3. 複数キーを同時に押すことは検出できる?

AQKeyEventにはmodifiers()があるので、CtrlやShiftなどを組み合わせて検出可能。

Q4. マウスの座標は絶対値?相対値?

Aevent.pos()はウィジェット内の相対座標。globalPos()は画面全体の座標。

Q5. イベントを無視したいときはどうする?

Aevent.ignore()を呼び出すことで、他の処理にイベントを渡すことができる。

まとめ

PySideのイベントハンドリングは、UIアプリケーションにおけるインタラクションの基盤です。本記事ではクリック・キー・マウス操作に対応する代表的なイベントメソッドを解説しました。

次回は、カスタムウィジェットの作り方を深掘りしていきます。ご期待ください!

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次