PyQt5でGUIのプログラムを作る(10) ブロック崩しpart2

HAI
ブロック崩しpart2です。
NIKE
ブロックの配置やブロックの当たり判定、衝突時の跳ね返りを行いました。

ブロックの当たり判定は4角の判定を行うと感度が良すぎるので、玉の中心と四角形の辺で行いました。
以外にブロックの色を列ごとに変化させるのが苦労しました。

アプリ画面です。

written by gatamix

PyQt5でGUIのプログラムを作る(9) ブロック崩しpart1

NIKE
PyQt5でブロック崩しを作ることを試みます。
KIJI
まずは玉を打ち返せるようにします。
MIKE
キー入力でバーを移動させることやバーと玉の当たり判定が必要になります。

キー入力でバーを移動させるには、def keyPressEventで入力を取得します。筆者のMacの構築環境だと矢印キーの入力が得られなかったので、h(左)とl(右)でvi風の入力にしました。あと玉の発出もenterキーでするようにしたが、macだとQt.Key_Enter の値と違うようなので、直接数値を指定しました(16777220はEnterキー)。
qtのkeyイベントの入力についてリンク参照。

上記のキー入力によって、def bar_moveを呼び出してバーを移動させます。

バーと玉の判定は若干自信がないのですが、四角の判定と上の2つの角の判定を行っています。
本当はリンク先のようにやったほうがいいけど、自力で作ったらコードのようになった。
バーの場合は、下と横は考えなくもいいと思うのでそのままにしています。
次のブロックを破壊する判定は、ちゃんと2領域プラス角4つにします。
判定もそうだけど加速度も考えなければいけないな。
横に当たった場合も跳ね返るなど(当たり前)

written by gatamix

PyQt5でGUIのプログラムを作る(8) 動画の作成

HAI
PyQt5のアニメーションを動画にします。OpenCVを使います。

OpenCVのインストールは過去記事参考。

前回のプログラムから def make_movie()を変更します。
変更は以下です。

  作成動画

以下参考にしたサイト。

written by gatamix

PyQt5でGUIのプログラムを作る(7) アニメーションgifの作成

KURO
PyQt5でGUIをつくります。今回は、画像をタイマー動かしgifアニメーションにするプログラムです。

NIKE
QGraphicsViewとPillow (PIL) 使います。

ポイントとしてはQGraphicsViewをタイマーによって動かしてアニメーションさせます。
その際に画像をpngで保存をして、movieボタンを押した際にアニメーションをストップさせます。
PILでgifを作成して、不要のファイルを削除しています。

作成したgifアニメーションです。

追記:前のプログラムだと、画像を開く数に制限があったので修正しました。Too many open filesのエラーがでた。(実行したMac環境では約256ファイル、端末など使用する分もあるので多少の誤差もあるらしい。)
オープンファイルの数について参考したサイト


ファイルを閉じればいいのですが、閉じるとデータの参照ができない。ならば、データをコピーすることにする。
メモリーが多くなったからできるちから技だと思う。
pilでの画像コピーについて参考したサイト

とりあえずファイル数の256の上限は解決できた。メモリーが足らなくなると別の問題が発生しそう。

written by gatamix

PyQt5でGUIのプログラムを作る(5) QGraphicsViewを使う

KURO
GUIのプログラムで画像を取り扱ってみるよ。

PyQt5で画像を取り扱う方法はいくつかあるようですが、QGraphicsViewを使ってみます。
QPenとQBrushの使いかたが情報がすくなく大変でした。PySideのほうが情報が多いかもしれません。共にPythonバインディングなので非常に参考になります。

NIKE
次はイベントを使って見ようと思います。

written by gatamix

PyQt5でGUIのプログラムを作る(4) サブウインドウをつくる

KURO
サブウインドウを作ってみる。掛け算の結果をサブウインドウに表示させるよ。

NIKE
入力した数値の判定も行ってみました。

Main Window

Sub Window

参考:サブウインドウの作り方


参考:正規表現

written by gatamix

PyQt5でGUIのプログラムを作る(3) iconを表示させる

KURO
プログラムを作る際にやる気をだすため、アイコンを追加してみました。あと出力用のラベルも追加です。
NIKE
順番的には普通最後です。


メモ

ラベルを変更する場合
change_label = self.input.text()
self.output_label.setText(change_label)
のように一時的に変数にいれないとエラーになりました。

アイコンはプログラムと同じフォルダーに入れました。
app.setWindowIcon(QIcon(path))とメインで実行しないと表示されませんでした。

pyqt4だけど参考にしたサイト


pyqt5アイコンの表示について

written by gatamix

PyQt5でGUIのプログラムを作る(2)

KURO
テキストボックスから入力した内容をコマンドラインに表示させるプログラムだよ。

メモ

QLineEdit()でテキストボックスを作れる。
self.input.text()で文字列の取得をする。

layoutについては,PyQt5ではないですが、リンク先が参考になります。

written by gatamix