\ 迷ったらまずTechAcademyの無料カウンセリング! /
PySide超入門【第18回 | 応用編】クリック・キー・マウス入力を制御する!QMouseEvent・QKeyEvent

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 | メソッド / プロパティ | 説明 | 例 |
---|---|---|---|
1 | mousePressEvent | マウスクリック時の処理を定義 | def mousePressEvent(self, event): |
2 | mouseMoveEvent | マウス移動時の処理を定義 | def mouseMoveEvent(self, event): |
3 | mouseReleaseEvent | マウスボタン離し時の処理 | def mouseReleaseEvent(self, event): |
4 | keyPressEvent | キー入力時の処理を定義 | def keyPressEvent(self, event): |
5 | keyReleaseEvent | キー離し時の処理 | def keyReleaseEvent(self, event): |
6 | enterEvent | マウスがウィジェットに入ったときの処理 | def enterEvent(self, event): |
7 | leaveEvent | マウスがウィジェットから出たときの処理 | def leaveEvent(self, event): |
8 | event | イベント全体をハンドリングする総合的な方法 | 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. ボタンクリックとマウスクリックは何が違う?
-
A:
QPushButton
のclicked
シグナルはウィジェット専用、mousePressEvent
はウィジェット全体で使える。 - Q2. マウスの右クリックだけを検出するには?
-
if event.button() == Qt.RightButton: print("右クリック")
- Q3. 複数キーを同時に押すことは検出できる?
-
A:
QKeyEvent
にはmodifiers()
があるので、CtrlやShiftなどを組み合わせて検出可能。 - Q4. マウスの座標は絶対値?相対値?
-
A:
event.pos()
はウィジェット内の相対座標。globalPos()
は画面全体の座標。 - Q5. イベントを無視したいときはどうする?
-
A:
event.ignore()
を呼び出すことで、他の処理にイベントを渡すことができる。
まとめ
PySideのイベントハンドリングは、UIアプリケーションにおけるインタラクションの基盤です。本記事ではクリック・キー・マウス操作に対応する代表的なイベントメソッドを解説しました。
次回は、カスタムウィジェットの作り方を深掘りしていきます。ご期待ください!

コメント