PythonでGUIアプリケーションを作る場合、ライブラリの選択肢が多くあるため初心者は大変迷いやすいです。Pythonインストール時に標準で付いてくるTkinterを使って、導入からHello World!プログラムまでを説明します。
こんにちは。wat(@watlablog)です。
ここではPythonによるGUIプログラミングに挑戦します!
GUIはユーザーフレンドリーなアプリを作ることができる!
GUIとは?
GUIとはGraphical User Interfaceの略で、我々ユーザーがキーボードやマウスといったユーザーインターフェース(コンピュータと人を繋ぐ機器)を使ってプログラムに指示を出したり操作したりすることを指します。
GUIと対比して語られるものにCUI(Character User Interface)がありますが、これはキーボードから入力した文字列によってのみ指示を与える方式のことを指し、丁度以前このブログでも紹介した以下の記事でやっていることに相当します。
基本!PythonのHello Worldをコマンドで実行する
GUIを使うと、ユーザーによる感覚的な操作で作業を進めることができます。このようにユーザーに寄り添うという意味でユーザーフレンドリーという言葉を使うことがあります。
GUIアプリケーションの目的
なんでGUIアプリケーションを作るの?
別にこれまで通りPyCharm上やコマンドプロンプト上で動作させても良いのでは?
最初は筆者もCUIだけでプログラムの目的は事足りると考えていました。しかしGUIでアプリケーションを開発するにはいくつかのメリットがあります。
・誰かに使ってもらう時に説明が楽
・繰り返し処理時にイベントで処理した方が楽
特に誰かに使ってもらう時、これは友人や社内の現場でツールとして配布する時等、いちいちCUIベースのプログラムを配布していたのではコマンドの説明が超絶面倒であることに他なりません。
「これ、このファイルはこの場所において、名前は〇〇ね。Windowsのコマンドプロンプト開いてね。あとこの関数は××というキーワードを入力して実行してね!あ、半角英数だけね!」
こんな指示が毎回必要な場合、もし広く配布してしまおうものなら、後の問い合わせ件数が膨大になること必至です。
仕事が増える!やってられるか!
そんな時、GUIでコンパクトにパッケージ化されたアプリケーションであれば、使い方を示したマニュアルがあればほぼそれで問題無いことが多いです。
社内でツール化を考えている人以外にも、有料ソフトとして不特定多数の方へ売る場合も同様のことが言えます。
また、GUIプログラミングの代表的な特徴はイベント処理であることが挙げられます。
イベント処理とは、「マウスでボタンを押したら」「グラフのカーソルを開放したら」「値が変わったら」といった変化点によって実行される関数が指定される処理のことです。
一本道の処理を行う場合はCUIでも問題ありませんが、ユーザーの応答を待って処理の内容を変えたい時等には単純なForループやWhileループでは場合分けしきれない状況が多くあります。
そんな時イベント処理を使って各ボタンに関数を登録しておけば、ソフトを立ち上げ直さなくても連続した処理が実行でき、生産性が向上します。
GUIは誰かに使ってもらう時やイベント処理を積極的に使って操作性を上げる目的で使います。
Tkinterを選ぶ理由とプログラム例
Tkinterを選ぶ理由
Pythonを使ってGUIプログラミングをする方法は沢山あります。Tkinterを始め、kivy、flaxx、Qt…。
いっぱいあって何を選んで良いかわからない!
全部試すには学習時間が惜しいし、結局何を使えば良いの?
初心者はTkinterを使いましょう!
異論は認めますが、筆者は明らかにPython初学者はTkinterを選択するのが良いと考えています。その理由は3つあります。
①処理が軽い
GUIアプリケーションの最大のデメリットは処理が重くなることです。CUIと違ってウィンドウやボタンを描画するためのメモリが必要だからです。
Tkinterは良くも悪くもシンプルさを売りにしたライブラリなので、最新のモダンな見た目をフルに活用したプログラム(例えば、画面切り替え時にページをめくる効果を追加…等)と比べるとはるかに軽く動作します。
凝った効果は中級者以上で十分!
②情報が多い
前回、開発統合環境にPyCharmを選んだ時の理由と同じですが、筆者を含むプログラミング初心者にはネットに転がっている情報は必要不可欠です。
TkinterはPython標準のGUI開発ライブラリなので、日本語や英語の情報がいたる所にあります。ちなみに、このブログでは主に信号処理やAIの分野といった科学技術計算に特化してGUIを構築していこうと思います。その際に必要となる機能に関してはブログで記録していきますが、他の情報はその他の良質な記事を参考にして下さい。
ネットには情報が多くありますが、Tkinterの日本語書籍はあまり無いみたいです。以下の「大槻有一郎, 12歳からはじめるゼロからのPythonゲームプログラミング教室, リブロワークスPython部※Amazon」ではTkinterを使っているみたいですが、探した限りだと後は英語の書籍が多いかも。もしあなたがPython初心者でゲームプログラミングをしたいのであればこの書籍が良書となると思います。
③他の言語でも使われている
Tkinterは後述しますが、Tcl/TkのTkというGUI開発ライブラリを使っています。このTkはPython以外にも他のRubyやPerlといった人気のプログラミング言語でも同様のライブラリがあります。
もし今後RubyやPerlをやりたくなった時は、一度PythonでTkを使えるようにしておくことで、言語を変えた時の学習コストを大きく下げることができそうです。
Tkinterとは?
そもそもTkinterとは、Pythonをインストールした時に付いてくる標準のGUIライブラリパッケージです。
Tkinterは、Tcl/Tk(ティクル・ティーケー)のTkをベースにしています。
Tclとは1988年にジョン・ケネス・オースターハウト博士がクロスプラットフォーム用に開発したスクリプト言語のことですが、TkとはそのTclの使用に向けて開発されたGUI開発ツールキットです。
Tkが人気を博した最大の理由には、簡素なコードでGUIが作れることがあります。
Hello World!をTkinterで作るコード
Tkinterを使って恒例の世界一簡単なHello World!プログラムを作ってみましょう!
コードは以下です。詳細はコード内のコメントを参照下さい。基本はウィンドウやラベルといったウィジェット(ガジェットと同義)を定義して設置していくというものです。
1 2 3 4 5 6 7 8 9 10 |
import tkinter as tk #Tkinterをインポート window = tk.Tk() #ウィンドウを定義 window.title("Title") #ウィンドウタイトルを設定 window.geometry("640x480") #ウィンドウサイズを設定 label = tk.Label(text = 'Hello World!') #ラベルを定義 label.pack() #ラベルを設置 window.mainloop() #メインループとして待機状態にする |
まだまだイベントの設定はしていませんが、全てのプログラムの基本である表示を行うことができました。ウィンドウの上の方に「Hello World!」と表示されていれば成功です。
まとめ
Python初心者のGUIプログラミングには、処理の軽さ・情報の多さ・多言語での実績から考えてTkinterがオススメです。kivy等も魅力的なライブラリですが、もう少し経験を積んでからの方が良さそうです。
本ページではまずHello World!プログラムを実行し、特に特別なインストールを必要とせずにGUIプログラミングができたことを確認しました。
こんなに簡単にGUIウィンドウが作れるのは初心者として感動!
これからどんどんイベント処理に挑戦してみよう!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!
Tkinter を使った方がいい理由がはっきりとわかってすごく為になりました!
まあまず私はライブラリなんかよりも基本を勉強するべきですけど・・・
ちょっと勉強不足で、よくわからない記事が多かったですけど、
このブログのシステムもよくわからなくて・・・
通知が来るようにできるならしたいですが。
・・・うーん
watです。記事を読んで頂きありがとうございます。
RSSといったシステムを使えば通知が来るようにはできると思いますが…、
実は僕もブログ初心者であまり全機能を把握できていないのです。。
ちょっと機能があるか探してみますね。