前回の投稿では,ウィンドウ上でマウスを押している間にそのマウスの位置情報を得ることができるようになりました.今回の投稿では前回の最後に予告した通り,それを応用したアプリとして簡単な「お絵かきアプリ」を作ってみようと思います.実際にやることは,前回の投稿で作ったプログラムに少し手を加えるだけなので,前回の投稿を見ていただくと理解しやすいのではないかと思います.
前回と同様,今回もkvファイルは用いません.
前回の投稿では,ウィンドウ上でマウスを押している間にそのマウスの位置情報を得ることができるようになりました.今回の投稿では前回の最後に予告した通り,それを応用したアプリとして簡単な「お絵かきアプリ」を作ってみようと思います.実際にやることは,前回の投稿で作ったプログラムに少し手を加えるだけなので,前回の投稿を見ていただくと理解しやすいのではないかと思います.
前回と同様,今回もkvファイルは用いません.
このシリーズももう7回目になるんですね.空き時間を見つけてぼちぼち書いているのですが,ブログに書くのはなかなか進まないです.はい,言い訳.
回りくどい説明,正確でない日本語など,つたない文章力なのは承知の上なのですが,それでも見てくださっている方がいらっしゃるのは本当にありがたい限りです.ゆっくりとボチボチ進める形にはなりますが,どうかよろしくお願いします.
前置きはこれぐらいにして,「これから kivy の話をしよう」.今までの内容では,文字を表示するだけのLabel(ポストイットみたいなものでしたね),ただの Button ぐらいしかやっていませんですね.これぐらいの機能だとパソコンで開発する意味がよくわからなくなってきます...ということで,今回はパソコンやスマートフォンならではの機能を一つ扱います.
例えば,パソコンやスマートフォンのゲーム開発などを考えると,キーボード上だけで操作するゲームももちろん考えられますが,より高度で豊富な遊び方を追求するためには,マウスを移動しクリックする,もしくはスマートフォンのタップなどの操作を加えることが欠かせないのではないでしょうか.今回の投稿では kivy で,マウスのクリック,またはスマートフォンのタップした位置など,デバイスからの位置情報をゲットする方法を紹介します.デバイスとはいっても,この投稿を見ている方はほとんどデスクトップやラップトップで開発していらしてると思われるので,今回の投稿の範囲ではマウスクリックに限って書かせていただきます.
前回までのしばらくの投稿ではkvファイルのいじることで様々な機能を使ったりその機能の特徴を変化をさせていましたが,今回はkvファイルは用いません.
前回の投稿では,Widgetクラスでのrootやself用いることでボタンの位置を動的に指定しました.しかし,それだけではボタンの大きさまでは動的に設定できませんでした.
Kivyでアプリを動的に設定する際にはFloatLayoutというクラスがあります.今回の投稿ではこちらの使い方を見ていきたいと思います.とはいってもやる内容は,pythonファイルはFloatLayoutが使えるようにimportをするだけで,kvファイルでFloatLayout用の編集をするだけです.
はやくFloatLayoutの機能を理解したいという方には,こちらの公式ドキュメントをご覧になってください.
前回の投稿までラベルとボタンを扱えるようになり,それらの書式(?)の設定方法などを学びました.今回はそれらの配置についてほんの少しだけ深く学びます.前回のボタンの配置の指定方法は座標をピクセル単位で指定していましたが,これはあまり賢明な設定方法ではないです.画面の大きさが一定の場合は問題なのですが,デバイスが変わり画面の大きさが変わってしまうとレイアウトが崩れる可能性があります.そのような問題に対処する「動的配置」というもの初歩をこの投稿で学びます.
忙しくて少し時間があいてしまいましたが,前回に引き続き Kivy のチュートリアルを載せていきたいと思います.これまで習った内容は次に書いてある投稿達になります.
Kivy 超入門(1):インストールからHello, World! まで
Kivy 超入門(2):ウィンドウのレイアウト,入力フォーム
Kivy 超入門(3):レイアウトを簡単に調整する(kvファイル)
これまでは主に Label という機能を使い文字を表示することをメインとしてきました.これはただ文字を表示するだけの機能でしたね.しかし,これまでの知識だけを用いて作れるアプリは,ただ与えられた文字を表示するだけのものになります.これでは GUI アプリを作成したいというのに,ただの連絡帳しか作れません...ということで今回は,タイトルにあるとおり,クリックできるボタンを作ってみましょう.ちなみに,今までは Label, TextInputの2つのウィジェットを使えるようになったので,これで3つ目ですね.
注意していただきたいのは,「ボタンを作成する」ことがこの投稿での目標でして,「ボタンを押すと,コレコレこういうことをできるようにする」ではないです.ボタンを押したときの操作(反応)の設定はもっとのちほどになるので,悪しからず...「その機能が知りたいんだが」という方は,こちらのYoutubeへのリンクに進んでいただくと「ボタンを押すと画面を切り替える」という機能を作ることをしていますので,見ていただくとよろしいかと思います.あくまでも自分はこのシリーズでチュートリアル的に順番にやっているので,このような内容を先取りすることはせずに進めていこうと思います.
前回までの投稿でお分かりかと思いますが,純粋なpythonの指示だけでkivyのクラスを使いこなすことになると,アプリを作成した際に大きいシステムになるととてもpythonプログラムになってしまいます.これの問題を解消してくれるのが kv ファイルです.どんな仕組みかを大雑把に説明すると,pythonのプログラムファイルのほかにkvファイルというものを(シンプルに)書き,そのkvファイルをpythonから読みむという形になります.
もちろんPythonのプログラムの中でkivyのクラスを使いこなしてプログラムしてもよいのですが,どういうやり方でやるかは状況,環境,個人の哲学などにに強く依存するので,kivyを学ぶ際に知っておいて損はないと思います.実際に書いてみると,同じプログラムでもわかりやすく書けます.
ということで,今回は kvファイルを用いて,Hello, World! を表示させるプログラムを作ってみます.Hellow World! が不安な方は筆者の書いた「Kivy 超入門(1):インストールからHello, World! まで」をまずは見てください(ステマといいたいが,「ステマと言いたいが」と書いたことでもはやステマではない.めでたしめでたし).
前回に引き続き,Harrison Kinsley さんのkivyの解説を日本語の文章にして,補足を加えながら説明していきたいと思います.今回はウィジェットとラベル,という内容でして,最終的にはログイン画面をつくることが目標です.ログインシステムでなくログイン画面です.その際にレイアウトと入力フォームというGUIアプリの必須知識を身に着けれます.
前もって気づいておけばよかったこととして,kivy をスムーズに理解するためには「クラスの継承」という知識を理解しているととてもスムーズになるのかと思います.筆者はクラスの継承をそこまで活用したことがなかったのですが,今回の投稿を書きながら勉強させていただきました.なので,クラスの継承の部分の説明が”弱い”かと思われますが,ご了承いただきたいです...
Python + Kivy で開発をしようを思ったときに,一番最初何から手を付ければいいかわからなかった.なぜかって,参考資料が少ないんだもん(本を買う金はない).ということで,もし自分みたいな人がいたら助けになるかもしれないと思い,自分がたどった道で余計な部分を削ぎ落した上で,殴り書きしてみようと思います.環境は Windows10 に Anaconda4.1.1(64bit) で Python3.5.2 をインストールした状態です.IDE として PyCharm を用いております.
2016.10.1追加:こちらの投稿を見てくださってる方が割といらっしゃるようだったので,紹介だけでなく読みやすいように日本語のチュートリアル的なのを書いてみようかと思い,大幅に改変しています.