見出し画像

【Python】はじめてのkivy/タイピング練習ツール

こんばんは。

自立に向けてとにかく手を動かしたいとっとです。

最近、宇宙ではなく自分を開発しようと、スキでPythonのプログラミングを独学しています。


その一環で、今回はPythonのGUIライブラリの一つである、kivyキヴィに手をだしてみましたので、ご紹介したいとおもいます。


パソコンで文字をうつ長男(7歳)と長女(3歳)

我が家では、小1になる長男のために、2Fのリビングに設置したデスクトップパソコンがあります。ジモティで3,000円ほどで購入した少し古いものですが、それでも第一世代のCore i7なので、通常使用にはまったく問題ありません。


長男はローマ字読みをおぼえたので、たまにパソコンでメモ帳をひらき、

難しい漢字をなんか言って!

と言い出します。


そこで、たとえば

ばら

とか言うと、

メモ帳に

薔薇

ってタイピングして楽しんで(?)います。

タイピングするときの指は、ホームポジションを教え、ゆっくりでいいので、きちんと正しい指配置で入力することだけは徹底させています。


ちなみに長女(3歳)もアルファベットを読めるようになっており、

わたしも仕事する!(長女の中でパソコンを使うこと=仕事をする)

と言って、やっぱりメモ帳で入力したりします。


長女の場合は、わたしがあらかじめメモ帳に、

にんじん
NI NN JI NN

などと書いてあげて、

やってみて?

というと、人差し指でキーボードからNを探して、Iを探して、Nを探して・・・と、つたないながらもアルファベットをひとつずつ打っていきます。


メモ帳でフォントサイズを100ptくらいに大きくして、ローマ字入力の練習をするようにしたのはわたしのアイデアなのですが、特に長女の場合は、事前にメモ帳に記入してあげないと遊べないため、すこし手間だなぁとおもいはじめ、

そうだ、Pythonしよう、

と思いたち、タイピング練習ツールを作ることにしました。


いまどきタイピングツールなんて、Webサイトでいくらでも転がってそうですが、いざ探してみると、文字の表示が小さかったり、細かい説明がいっぱいで3歳児にはよくわからなかったり、あとはわたしが作りたい、というのが一番の理由ということもあり、つくってみることにしました。


つくったタイピング練習ツール

どんなツールにしようか少しかんがえましたが、まだまだ考えるほど手の込んだレベルのものはできません。

そこで、こんな感じのものにしようとイメージします。

仕様案
・事前にやさいの名前や動物の名前で辞書データを登録しておく
・辞書データから、ランダムに名前とそのローマ字表記を表示させる
キーボード入力を検知し、表示されたローマ字表記どおりにキーボードから入力されればクリア!

もしこんなのができれば、あとは好きな時に辞書データさえ追加していけば、毎回メモ帳で書いてあげなくても飽きずに遊べるかな?と考えたんです。

こだわりというほどでもないですが、Pythonの独学という観点では、今回初めてKivyを使うことにしました。


細かい説明はあとにして、とりあえず作ったツールの動画がこちら。

余談
ちなみに、このため(↑)にはじめてYoutubeチャンネルをつくりました。
なんでもやってみるとおもしろいですね。


ちょっと、うえのほうが切れちゃってますが、左の方にやさい、どうぶつ、四字熟語、のボタンがあり、すきな言葉で練習ができます。

四字熟語の出題は、漢字が好きでドラえもんの四字熟語マンガにハマっている長男のためにつくりました。


一応、キャプチャ画像も。

起動したところです。ゆくゆくは画面下部にキーボード配置を表示させて、視線は画面をみながら指の位置を確認できるようにしたいのですが、まだそこまでできていません。kivyには仮想キーボードのライブラリがあるようなのですが、使い方が分からず。。

画像1


やさいを選ぶとランダムに野菜の名前が表示されます。白い字が辞書からランダムに表示された文字で、ピンクの字が実際に入力した文字です。

画像2


どうぶつボタンを押すとこんな感じ。

画像3

単語を最後まで入力すると、水色のメッセージが「エンターキーを押してね!」となり、そこでエンターを押すと勝手に次の問題が表示されます。

文字を打ち込んだら、必ずエンターキーで確定させる、という動作までをワンセットで慣れてほしいと思い、こういう仕様にしました。


さらに四字熟語ボタンを押すとこんな感じです。

画像4


やさいやどうぶつ、四字熟語は、自分でcsvファイルに辞書データとしてあらかじめ保存しておき、起動時に読み込むようにしています。

四字熟語のcsvファイルはこんな感じです。

画像5


ちなみにこの四字熟語のデータは、Pythonのスクレイピングによって小学生向け100選のサイトから自動で取得したものです。

独学をはじめた当初(といっても2か月前ですが)、以下の記事を書いたときよりも、はるかに早くコーディングできるようになっていました。

また、ほかのサイトで、1,000語、4,800語、の辞書もスクレイピング済なので、長男が100語全部おぼえたら、辞書データをさしかえていきたいとおもいます。


長男の感想

さすがにやさいどうぶつの問題はつまらないようで、四字熟語をやってもらいました。まだまだ手元を見ながらですが、ただしい指づかいで入力できています。

わたしが用意した四字熟語データには、長男がハマっているドラえもんのマンガ本には出てこない四字熟語がたまにあるようで、おもしろいと言ってくれました!

(まだまだ、1,000語の辞書も用意してるんだよ・・ふふ)


ひととおり遊び終えた長男から一言、

ほかに問題の種類増やしてよ。

え?お、おういいけど、どんな問題がいい?

ん~ 虫の名前とか、掛け算とか割り算、あと足し算のひっ算とか!

・・・

虫の名前はおもしろそうですね。次作ってみます。といっても辞書を追加すればすぐできちゃいます。

掛け算割り算は・・・タイピング練習から変わってない?

と思いましたが、いいアイデアだとおもいました。

タイピングの練習をしようとおもって練習するのではなく、算数の問題を解こうと思って、その流れでタイピングの練習になるってほうが身に付きそうです。

あとはひっさんですね・・・むずかしい・・・けどおもしろそう。

どうやってつくろうかな。(笑)


苦労した点

今回はじめてPythonkivyライブラリをつかってプログラミングしてみて、苦労した点を三つ挙げます。


kivyとっつきにくい!

Kivyは、GUIレイアウトをkvファイル(.kv)という独自の形式(といってもCSSに近い)で記述し、Pythonコード側と連携させるのですが、わたしにはすごく理解しづらく、サイトであさったサンプルを(得意の)つぎはぎでなんとかつくりこんだ感じです。

しかもKivyのことを扱うサイトのサンプルは、ほとんどがオブジェクト指向で書かれていたので、さすがにclassの意味が分からないと理解できず、すこし真面目に、大学のとき以来オブジェクト指向についておもいだしながら再度勉強しました。


文字入力判定

よくあるタイピングゲームのように、お題として表示されたローマ字を、一文字一文字入力するたびに色を変えていくようなこともトライしてみたのですが、どうしてもワンテンポ遅れて(次のキーを入力したタイミングで画面に反映)しまい、今回のような出来上がりになりました。

今回は、keyboardというライブラリで、リアルタイムに入力したキーを判定するようにしています。


exe化に苦労しました!

上記でご紹介した動画では、.pyファイルから起動していますが、exe化まで完了しています。が、このexe化が手間取りました。

どうしても、こんなエラーがでてうまくいきません。

前略・・
130 WARNING: stderr:   File "main.spec", line 2in <module>
    from kivy.deps import sdl2, glew
131 WARNING: stderr:     from kivy.deps import sdl2, glew
ImportError: cannot import name 'sdl2' from 'kivy.deps' (C:\Users\xxxxxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\deps\__init__.py)
131 WARNING: stderr: ImportError: cannot import name 'sdl2' from 'kivy.deps' (C:\Users\xxxxxxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\deps\__init__.py)

一週間ほど悩んだり調べたりした結果、なにかでみた英語のサイトがヒントとなり、解決できました。


まず、このエラーはkivyに関連したライブラリであるsdl2ってのとglewってのと、この二つが見つからない!となってます。

でも、

pip list

ってやってみるとちゃんとインストールされているんです。


解決策としては、

C:\Users\xxxxxxxx\AppData\Local\Programs\Python\Python39\Lib\site-packages\kivy_deps

にあるglewフォルダとsdl2フォルダを

C:\Users\xxxxxxxx\AppData\Local\Programs\Python\Python39\Lib\site-packages\kivy\deps

にコピーすると、うまくいきました。

※わたしの環境はWindows10です。

これらのライブラリがpipでインストールされるフォルダと、Pyinstallerでビルドするときに参照するフォルダとが違うことが、原因のようでした。
ここはユーザが勝手にいじったわけではないので、これはPythonの仕様としてみなおされたほうがいいようにおもいます。


まとめ

長男と長女のパソコン事情から、わたしのPython独学のいいきっかけとして、今回はじめてkivyをつかってのプログラミングをしてみました。

Tkinterとちがって、ウィジェットのレイアウトがwebデザインぽい感じがしてとっつきにくかったのですが、それも勉強だと思い、なんとかタイピングツールを形にしました。


今回のプログラミングで学んだことをまとめます。

・kivyの基本的な使い方(exe化含む)
・乱数の使い方(random.randint)
・フォントファイルの読み込み方
・オブジェクト指向の考え方(の初歩)
・四字熟語(しらなかった熟語たくさんあり)


タイピングツールについては今後以下のような点を盛り込んでいきたいです。

長男の要望反映(虫の名前の辞書追加、掛け算割り算、ひっさん)
キーボードレイアウトの表示(できればつぎに打つべきアルファベットをキーボードレイアウト上でハイライトしたい)
■四字熟語については、一語入力がおわるごとに、その熟語の意味を表示してから次の問題を出す。
BGMをつけてみる。


長くなってしまったので、ソースコードは割愛しますが、もしこの記事のタイピング練習ツールに興味をもっていただき、ソースコードやexe化したツールがほしいよ!

っていう方がいらっしゃいましたら、ぜひぜひコメントください。

大したものではありませんが、なにかのお役に立てるならば幸いです。


最後まで読んでいただき、ありがとうございました。





Next

その後、さらに改良を加えました。
よろしければぜひご覧になってください!



この記事が気に入ったらサポートをしてみませんか?