pygletを使ってPythonで絵を描く|Pythonでやってみる

Python独学ならTech-Joho TOP > いろいろやってみた >pygletを使ってPythonで絵を描く


pygletとは

pygletは、公式サイトによると、クロスプラットフォームなPythonでのウインドウやマルチメディア開発のためのライブラリです。

a cross-platform windowing and multimedia library for Python.

要は、ウインドウを出したり、画像や動画を表示させるアプリをつくるキットということです。

参考 pyglet公式
pyglet wiki

前に紹介したpygameと似ていますが、よりあとに作られたもののようです。

この記事では、pygletに、シンプルな図形を描画させてみます。


1.Pythonの実行環境の準備

pygletを利用するにあたって、Pythonを自分のパソコンにインストールする必要があります。

Pythonインストールの方法については、下の記事をご覧ください。
pygameを使ってPythonで絵を描く


2.pygletインストール

pygletのインストールは簡単で、pipコマンドを利用できます。

anaconda prompotや、comand prompt、power shell等の黒い画面で、下のコマンドを実行してください。

>>>pip install pyglet

下のように、”Successfully installed”と出たらインストール成功です。

略
Successfully installed future-0.16.0 pyglet-1.3.1

2018年3月8日時点では、バージョン1.3.1がインストールされました。


3.まずは絵を書いてみる

pygameの例kivyの例と同じように矩形、長方形を描いてみましょう。

具体的には、横300px、縦200pxの長方形のウインドウを表示し、
左上から右に10px、下に10pxの位置に、幅20px、高さ50pxの縦長の長方形を描きます。

下の内容のファイルpyglettest.pyを作成して下さい。
pyglettest.py

import pyglet
window = pyglet.window.Window(300, 200)
window.set_caption('This is a pyglet sample')

quad = pyglet.graphics.vertex_list(4,
    ('v2f', [10, 190, 30, 190, 30, 140, 10, 140]),
    ('c3B', (255, 255, 0, 255, 255, 0,255, 255, 0,255, 255, 0,)))

@window.event
def on_draw():
	quad.draw(pyglet.gl.GL_QUADS)

pyglet.app.run()

次に、ファイルを保存したディレクトリで下のコマンドを実行してください。

>>> python pyglettest.py

このような黄色い長方形が左上に表示された小さなウインドウが出てくるはずです。
pyglet rect

このウインドウを消すには、”python pyglettest.py”を打ち込んだ黒い画面(ターミナル)でCtrl(コントロール)とZを同時に押して下さい。

私のPC(mac)では、その後もウインドウが残ってしまったので、強制終了してください。


4.解説

作成したコードの各部分の意味を解説していきます。

import pyglet

この部分では、pygletモジュールをインポートしています。

window = pyglet.window.Window(300, 200)
window.set_caption('This is a pyglet sample')

この部分では、ウインドウを作っています。
引数の300と200で、幅300ピクセル、高さ200ピクセルのウインドウを作っています。
これは変数windowに代入されています。

windowing

“window.set_caption(‘This is a pyglet sample’)”では、ウインドウ上部のタイトルを指定しています。
画像で確認してみて下さい。”This is a pyglet sample”がタイトルになっているはずです。

quad = pyglet.graphics.vertex_list(4,
    ('v2f', [10, 190, 30, 190, 30, 140, 10, 140]),
    ('c3B', (255, 255, 0, 255, 255, 0,255, 255, 0,255, 255, 0,)))

この部分では、画面に表示する内容を決めています。

pyglet.graphics.vertex_list関数は、座標のリストをつくります。
引数の4は、4つの点を作るという指定です。

次の引数の”(‘v2f’, [10, 190, 30, 190, 30, 140, 10, 140])”の、v2fは、その後のリストが、2つの値(x軸座標とy軸座標)の組であること、fつまりFloatで浮動小数点数であることを示しています。

つまり、その後の”10, 190, 30, 190, 30, 140, 10, 140″は、
x軸が10、y軸が190の点が一つ、x軸が30、y軸が190の点が一つ…という具合に長方形の4つの点の座標を指定しています。
ちなみに、pygletの座標系では、左上が原点のようです。

次の、”(‘c3B’, (255, 255, 0, 255, 255, 0,255, 255, 0,255, 255, 0,)))”のうち、c3Bは、その後のリストが、cつまりColorで色を表していて、
3Bつまり赤、緑、青の3つの数字の組で、Unsigned byte、0から255の数字で表されることを示しています。

Rつまり赤色とGつまり緑色が最大値を指定しているので、”255, 255, 0″は黄色です。

まとめると、黄色の長方形の色と座標を指定して変数quadに代入しています。

@window.event
def on_draw():
	quad.draw(pyglet.gl.GL_QUADS)

ここでは、アプリが起動した後に、何を刷るかをon_draw関数の中で定義しています。
“quad.draw(pyglet.gl.GL_QUADS)”は、先程つくった四角形の色と座標の情報auadを使って、四角形を描いています。
pyglet.gl.GL_QUADSが四角形という指定です。

他にも、pyglet.gl.GL_LINESで線を指定できるなど、いろいろな図形を描けます。
詳しくはこちらをみてみましょう。
drawing-primitives

pyglet.app.run()

最後に、アプリを起動しているのがこの部分です。