Raspberry Pi用に使っている小型ディスプレイがタッチパネルにもなっているので、タッチ機能を使った何かができないかと調べていたらpygameというライブラリを見つけました。
このライブラリはpythonでゲームを作るためのものらしいのですが、タッチパネルの機能を扱えるということで今回記事にしてみた次第です。
では始めます。
1:pygameのインストール
※「Raspberry Pi OS (32-bit) with desktop and recommended software」の場合はすでにインストールされています。
pygameはpipが入っていれば以下のコマンドでインストールできます。
$ pip3 install pygame
pygameが正常にインストールされているかはpythonを起動させてimportすることで確認できます。
$ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pygame pygame 1.9.4.post1 Hello from the pygame community. https://www.pygame.org/contribute.html >>>
2:pygameを使ったタッチパネル機能のサンプル
pygameをインストールできたら参考資料のソースコードを見つつ、自分が作った簡単なサンプルを動かしてみます。
・touch_test.py
# -*- coding: utf-8 -*- import pygame import os FONT_PATH = '/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf' FONT_SIZE = 30 FPS = 24 def main(): print("--- start ---") screen, display_clock, font = setup_gui() # gui部分の設定 init_display(screen, font) # 画面の初期化 pygame.display.update() # 画面更新 counter = 0 while True: display_clock.tick(FPS) # fps設定(最大は40fps) for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: # マウスボタン押下イベント pos = event.pos put_text(counter, pos[0], pos[1], (255,255,255), font, screen) # テキスト表示 pygame.display.update() # 画面更新 counter = counter + 1 # ESCキーが押されたら終了 if (event.type == pygame.KEYDOWN) and (event.key == pygame.K_ESCAPE): pygame.quit() break print("--- end ---") # GUIの設定を行う関数 def setup_gui(): pygame.init() # 初期化 pygame.mouse.set_visible(True) # マウスポインタ表示 size = (pygame.display.Info().current_w, pygame.display.Info().current_h) # ディスプレイの画面サイズを取得 print ("display size: %d x %d" % (size[0], size[1])) font = pygame.font.Font(os.path.join(FONT_PATH), FONT_SIZE) # フォントの読み込み # ウインドウサイズ指定(ここではフルスクリーン。フルスクリーンの引数がないと全画面表示にはならない) screen = pygame.display.set_mode(size, pygame.FULLSCREEN) display_clock = pygame.time.Clock() # 画面のクロック return screen, display_clock, font # 画面を初期化する関数 def init_display(screen, font): screen.fill((0,0,0)) # RGBで黒 label = font.render("Please Touch or MouseClick (Exit [esc] key)", 1, (255, 0, 0)) screen.blit(label, (0, 0)) # テキストを表示させる関数 def put_text(text, xpos, ypos, color, font, screen): gap = int(FONT_SIZE / 2) label = font.render(str(text), 1, (color)) screen.blit(label, (xpos-gap, ypos-gap)) if __name__ == '__main__': main()
このソースコードを実行すると自動的にフルスクリーンになります。タッチやマウスクリックなどをするとその場所にクリックした回数が表示されます。終了させるにはESCキーを押します。
以上がpygameを使ってタッチパネル機能を使ってみた内容です。
pygameというライブラリの内容をよく知らないで使ってしまっていますが、マウスポインタをFalseで非表示にするとタッチの座標が大きくずれたりといくつか問題がありました。マウスカーソルの画像も変更できるようなので、その場合は透明な画像をマウスカーソルにしたりして対応する必要がありそうです。
pygameをもっと理解してタッチパネルを利用した何か面白いものを作ってみたいです。
・参考資料