pyglet でマウスのボタン入力を取得

簡単にマウス位置が取れたので、今度はボタンの入力方法を調べてテスト。入力が取れたら、何か画面に変化があったほうが楽しそう。左クリックと右クリックで何かやることを考えてみます。

  • from pyglet.window import mouse すると、mouse.LEFT とか mouse.RIGHT が使える
  • ボタンが押されたときに呼ばれる、on_mouse_press 関数を実装する

のがポイント。昨日のコードにそのまま追加しましょう。

ボタンが押された座標が取得できるので、それを使って、表示しているテキストの場所を変化させるのが簡単ですね。左クリックしたらテキストの位置をマウスの位置に移動し、右クリックしたら初期位置(画面の中央)に移動する、という仕様で作ってみようと思います。

import pyglet
from pyglet.window import mouse

window = pyglet.window.Window()
window.set_mouse_visible(True)

label = pyglet.text.Label('Mouse Test',
                          font_name='Times New Roman',
                          font_size=36,
                          x=window.width//2, y=window.height//2,
                          anchor_x='center', anchor_y='center')

@window.event
def on_draw():
    window.clear()
    label.draw()

@window.event
def on_mouse_motion(x, y, dx, dy):
    label.text = 'x={} y={} dx={} dy={}'.format(x, y, dx, dy)

@window.event
def on_mouse_drag(x, y, dx, dy, buttons, modifiers):
    if buttons & mouse.LEFT:
        label.x += dx
        label.y += dy

@window.event
def on_mouse_press(x, y, button, modifiers):
    if button & mouse.LEFT:
        # 左ボタンが押されたら、マウスカーソル位置にテキストを移動
        label.x = x
        label.y = y
    elif button & mouse.RIGHT:
        # 右ボタンが押されたら、画面の中心にテキストを移動
        label.x = window.width // 2
        label.y = window.height // 2

pyglet.app.run()

ちょっと長くなってきたかな…。でも、import の1行と on_mouse_press が追加されただけ。まだ簡単!

タイトルとURLをコピーしました