マウス入力

2014年9月7日

ファイル

02-mouse.tar.gz

使い方

ウインドウ上でマウスを動かしたりボタンを押したりすると、コンソール上にメッセージが表示されます。

内容

マウスの入力を拾うには、コールバック関数を使います。

win.connect("button-press-event", buttonPress)
win.connect("button-release-event", buttonRelease)
win.connect("scroll-event", buttonScroll)
win.connect("motion-notify-event", motionNotify)
  • "button-press-event": マウスのボタンが押されたとき
  • "button-release-event": マウスのボタンが離されたとき
  • "scroll-event": ホイールを動かしたとき
  • "motion-notify-event": マウスを動かしたとき

"button-press-event", "button-release-event", "motion-notify-event" を拾うには、次のようにマスクの設定が必要です。

win.set_events(
    gtk.gdk.BUTTON_PRESS_MASK |
    gtk.gdk.BUTTON_RELEASE_MASK |
    gtk.gdk.POINTER_MOTION_MASK
)

"button-press-event", "button-release-event" のコールバック関数でボタンの状態を得るには、第 2 引数 event の event.button, event.state を調べます。

def buttonPress(widget, event):
    print("BUTTON PRESS")
    mouseButtonKind(event.button)
    modifierKind(event.state)

    return False

event.button

  • 1: 左ボタン
  • 2: 中央ボタン
  • 3: 右ボタン
def mouseButtonKind(button):
    if button == 1:
        print("LEFT")
        ...

event.state ("=" ではなく "&" で調べる)

  • gtk.gdk.SHIT_MASK: Shift が押されている
  • gtk.gdk.CONTROL_MASK: Ctrl が押されている
  • gtk.gdk.MOD1_MASK: Alt が押されている
def modifierKind(state):
    if state & gtk.gdk.SHIFT_MASK:
        print("Shift")
        ...

"scroll-event" のコールバック関数では、第 2 引数 event の event.direction でホイールの移動方向を調べることができます。

def buttonScroll(widget, event):
    if event.direction == gtk.gdk.SCROLL_UP:
        print("BUTTON SCROLL UP")
    elif event.direction == gtk.gdk.SCROLL_DOWN:
        print("BUTTON SCROLL DOWN")
        ...

event.direction

  • gtk.gdk.SCROLL_UP: 上に動いた
  • gtk.gdk.SCROLL_DOWN: 下に動いた

マウスの位置を知るには、第 2 引数 event の event.x, event.y を調べます。

def motionNotify(widget, event):
    print("(%3d, %3d)" % (event.x, event.y))

    return False

PyGTK プログラミング 目次へ