Python の tkinter のサンプルコードについてまとめておきます。Python が動く環境があれば、新たな設定をすることなく、GUIアプリが作成できることを意図しています。最小限の知識で済むよう記載します。
以下の環境で動作確認をしています。tkinter は Python 3 を前提に記載します。
環境: Windows 10、Anaconda、Python 3
背景
Python が使える環境があるとき、Python に標準で入っている tkinter というパッケージを使うと、任意の GUI のアプリを作成できます。つまり、ボタンやテキストボックスを使ったGUIアプリを作って、自分で使ってもよいですし、他人に配布することも可能になります。
そこでまずは、Python の tkinter を最小限の知識、かつ、最短手順で実行するサンプルコードについてまとめておきます。
Python の標準環境のみで最短で GUI アプリが作成できるようになることを意図しています。完全初心者向けで、最短3行サンプル、かつ、最速の3サンプルで、一番ベーシックな部分を説明することにします。
tkinter について書籍や Google 検索で調べると、本題に入る前の前段の説明が長いものが多いです。
すぐに動くサンプルを先に示してもらったほうが理解が早いのにと、ずっと思っていました。
そこで、tkinter を覚える前の自分が「こんな感じで書いてあったら最短で突破できたのに…」と思っていたあたりについて、まとめておくことにします。
要するにコピペ3回で終わります。。
ステップ1:3行だけの tkinter サンプルコード
import tkinter
frame1 = tkinter.Tk()
frame1.mainloop()
使い方
・ まずは3行だけのサンプルコードです。Python がインストールしてある PC で、上記のサンプルプログラムをテキストファイルに貼りつけて、test1.py 等の名前で保存してください。
・ つぎに、PC のコマンドプロンプト(または、Anaconda Prompt)を起動して test1.py のあるフォルダに移動し、”python test1.py” [enter] としてスクリプトを実行してください。
VS Code 等を使いたい場合は、各環境での実行方法に従ってください。以下のステップ2、ステップ3のサンプルも使い方は同じです。
説明: tkinter ライブラリの読み込みとGUI表示
・ まずは、最短の3行の tkinter のサンプルです。GUI の画面を表示するだけで、何もしないプログラムの例です。
・ 最初の1行で、GUI を作るための Python の標準である tkinterライブラリを読み込みます(インポートします)。
・ 2行目の frame1 = tkinter.Tk() としたところで GUI 画面に対応するオブジェクトを定義します。GUI 画面を作るためのお約束と思えばよいです。
・ 3行目で、PC の画面に表示させます。具体的には、作成した frame1 について mainloop() を実行すると表示させることができます。
・ mainloop() を実行すると、制御を GUI に渡す動きになります(GUI 画面を表示するループを繰り返し実行し続ける)。なので、mainloop() 以降に書いたプログラムは、GUI には影響せず、GUI を閉じた後に実行される動きになります。
うまく動いたら、例えば、mainloop() のつぎの行に print( “end” ) 等のスクリプトを追加して再度実行してみてください。GUI 表示中には print 関数は実行されず、GUI を閉じた後に実行され、コンソールに “end” と表示される動作となります。
・ なお、スクリプトは、前の行から順に実行していきます。GUI 上にボタン配置などをする場合は、2行目と3行目の間(GUI画面を作った2行目以降であって、かつ、GUI 画面の表示を実行する3行目より前)で定義します。
・ 上記のサンプルでは、タイトルに “tk” という文字が表示されていてデザイン的にいまひとつですし、画面サイズも調整したい、となると思います。
そこで、上記のスクリプトが動いたら、つぎのステップ2のスクリプトに差し替えて(コピー&ペーストして)、実行してみてください。
ステップ2:タイトル文字と画面サイズを設定する
import tkinter as tk1
frame1 = tk1.Tk()
frame1.title( 'title' )
frame1.geometry("200x100")
frame1.mainloop()
説明: GUI 画面で title と geometry を設定
・ ステップ2は、5行の tkinter のサンプルです。
・ まず、冒頭で同じように tkinter をインポートしています。ステップ1のままでもよいですが、ライブラリを呼び出すたびに、毎回 “tkinter” とタイプするのは煩雑です。そこで、”import tkinter as tk1” として、これ以降は “tk1″ という省略した名前で呼び出しますよと指定します。”tk1” は適当に決めた文字列です。うまく動いたら、修正しても問題ありません。
・ つぎに title() で、タイトル文字の設定をしています。
・ さらに、geometry() で、画面サイズを設定しています。上記のサンプルでは、横方向のサイズが 200、縦方向が 100 と設定しています。
これらの文字列や値について、うまく動いたら、他の数値に変えてみてください。ちなみに、パソコンのモニターの画面画素数程度の数値を入れると、GUI画面のサイズがパソコンの画面サイズとほぼ同じになります。したがって、設定する数値は、単位が画素 pixel になっていることが確認できます。
・ うまく動いてだいたいわかったかなと思ったら、つぎのサンプルに差し替えて実行してみてください。
ステップ3:入出力(テキストボックスとボタン)を設定する
import tkinter as tk1
def click1():
str1 = "abc"
textbox1.delete(0, tk1.END)
textbox1.insert(0, str1)
frame1 = tk1.Tk()
frame1.title( 'title' )
frame1.geometry("300x100")
textbox1 = tk1.Entry(master=frame1)
textbox1.place(x=10, y=10, width=100)
button1 = tk1.Button(frame1, text='click', command=click1 )
button1.place(x=120, y=10, width=100)
frame1.mainloop()
説明: ボタンとテキストボックスを配置する
・ ステップ3は、ボタンとテキストボックス(正確にはエントリ)を配置して使用する事例です。
・ 少し行数が増えましたが、見た目のまま、def としたところでの関数1つと、テキストボックス(正確にはエントリ)、ボタンを追加しています。
・ 上記のサンプルではボタンをクリックすると、テキストボックスに文字列 “abc” を表示します。
この程度の GUI が作成できるようになれば、ボタンをクリックすると、テキストボックスから文字列を読み込んで、何か処理をし、結果をテキストボックスに返す、などといった処理が作成できることになります。
・ スクリプトの説明としては、まず、tkinter の import をしています。
・ つぎに、ボタンをクリックしたときの処理を def click1() とした部分で定義しています。最初はプログラムの内容は読み飛ばしてください。
・ つぎに、ステップ1、2と同様、GUI 画面となる frame1 を作成し、タイトルと画面サイズを設定しています。
・ textbox1 としたところで、文字列を入出力するためのボックス(エントリ)を定義しています。
・ さらに、button1 としたところで、ボタンを定義しています。
・ GUI 画面上で、textbox1, button1 の位置と大きさを指定したいです。
そこで、place() としたところで x, y, width をそれぞれ定義しています。うまく動いたら、数値を少し変えてみてください。
・ ボタンについては、クリックしたときにどう動くか決める必要があります。そこで、command=click1 としたところで、クリックしたときに実行する関数 click1() を指定しています。
・ また、それぞれの textbox1, button1 は、frame1 として定義した GUI 上に配置します。そこで、master=frame1 として描画する画面を指定しています。
GUI 画面は複数設定することが可能なので、どの画面に配置するのか指定すると理解すればよいです。
・ それから、ボタンをクリックすると実行する関数として、冒頭に def click1() で定義しています。
具体的には、まず、文字列 str1 を “abc” として定義しています。うまく動いたら、好きなように変えてみてください。
つぎに、delete() で、テキストボックスに入っている文字をすべて消去し、insert() で文字列 str1 を入れています。複雑なプログラムを作る場合は、この click1() 関数の中身を変えていけばよいことになります。
・ 最後に frame1.mainloop() として、画面を表示させています。
・ この GUI アプリの動きを、時間の流れで見てみます。
まず、Python スクリプトを実行すると、スクリプトが前から順に実行されます。
mainloop() を実行するタイミングで、その前までに定義した GUI 画面、テキストボックス、ボタンが表示され、表示し続ける動きとなります。
そして、GUI 画面の表示中に、ユーザがボタンをクリックすると、そのタイミングで click1() 関数が実行されます。click1() 関数が実行されると、結果がテキストボックスに表示される、という動きになります。
GUI 画面を閉じると、mainloop() の行が終わり、スクリプトの最後までいき、プログラムが終了します。
まとめ
Python の tkinter のサンプルコードを、最小限の知識の範囲でまとめました。
3行で最短の GUI 画面が作成できます。そして、3ステップで、テキストボックスとボタン(入出力に必要な最小限の要素)まで動くようになると思います。ほぼ最短ステップだと思います。
なお、上記のサンプルは、ボタンをクリックすると一方的に文字列をテキストボックスに表示するだけの最も簡単なものです。
テキストボックスから文字列を入力、出力する等の場合については、以下の関連リンクにまとめています。
興味のある方は/理解したという方は、動かしてみてください。