Python に標準で入っている tkinter の使い方をまとめておきます。最小限の知識で “Hello World!” を GUI で表示します。最短のサンプルコードにしています。
環境: Windows 10 で、Anaconda、Python 3.x をインストールした環境で動作確認をしています。
あらかじめ Python 3.x のインストールが必要です。
サンプルコードの使い方
コピー&ペーストでもよいので、先に動くプログラムを作ってしまい、いくつかプログラミングをしていく中でしだいにアレンジしていくというアプローチが最短だと思います。
① 下記のサンプルコード1をテキストファイルに貼りつけて、”sample1.py” 等の名前で保存してください。
② Windows 10 のコマンドプロンプト(または、Anaconda のコマンドプロンプト)で、①のファイルのあるフォルダに移動し、“python sample1.py” [enter] と入力して実行してください。
③ 動いたら、サンプルコード2についてもファイル名 “sample2.py” 等として、同様に保存し、実行してください。
サンプルコード1: 最短の GUI プログラミング
まずはお決まりの “Hello World!” を tkinter で表示させてみます。
import tkinter as tk1
frame1 = tk1.Tk()
textbox1 = tk1.Text( frame1 )
textbox1.insert( 1.0, "Hello World!" )
textbox1.pack()
frame1.mainloop()
説明
・ まずは6行だけの簡単なサンプルです。ほぼ最短のコードかと思います。
・ import … とした行で tkinter を読み込んでいます。末尾に “as tk1” を加えることで、以後、tk1 という文字列で tkinter の関数などを呼び出します。
・ frame1 = tk1.Tk() とした行で tkinter を呼び出して、GUI 画面となるオブジェクトを定義しています。この後、frame1 に、GUI 画面に表示するボタンなどを作ります。最後に frame1.mainloop() を実行することで、GUI 画面を表示します。これはこういうお約束だと理解しておけば十分です。
・ つぎに、textbox1 = … とした行で、テキストボックスを作っています。テキストボックスは、上で作った frame1 上に配置するので、カッコの中で、配置する先となる frame1 を指定します。
・ さらに、textbox1 で .insert(…)として、文字列をテキストボックスに入力します。ここでは、”Hello World!” としています。
pack() としたところで、テキストボックス textbox1 を GUI 上に配置しています。もし、テキストボックスの位置や大きさを設定した場合は、pack() のカッコ内で指定します。ここでは空欄(デフォルト)のままにしておきます。
・ 最後に、frame1.mainloop() を実行します。これにより、テキストボックスを配置した GUI 画面が表示され、画面を表示し続ける動きとなります。
サンプルコード2: ボタン Button とテキストボックス Text を使ってみる
import tkinter as tk1
def click1():
textbox1.insert( 1.0, "Hello World! " )
frame1 = tk1.Tk()
frame1.title( 'python tkinter' )
frame1.geometry("400x100")
textbox1 = tk1.Text( frame1 )
textbox1.place( x=10, y=10, width=250, height=80 )
button1 = tk1.Button( frame1, text='click', command=click1 )
button1.place( x=270, y=10, width=100 )
frame1.mainloop()
説明:ボタンクリックで動くようにする
・ サンプルコード1では文字列を表示するだけでした。しかし、これだと実質何もできないので、GUI を作った意味があまりありません。
そこで、サンプルコード2では、GUI 画面上でボタンをクリックすると文字列を表示するようにプログラムを変えてみます。
・ ボタンをクリックすると関数(click1())を実行し、実行すると文字列をテキストボックスに表示するようにしたいです。
そこで、def click1(): としてクリック時に実行する関数を作ります。関数の中身は、サンプルコード1でテキストボックスに文字列を表示したスクリプトを貼りつけた程度のものです。Python では、関数や for 文などの中身を書くときは、中身の各行にインデントをつけるというルールになっていますので、各行の冒頭に半角スペース4つを入れています。
・ その後、サンプルコード1と同様、GUI 画面のモトとなる frame1 を作ります。今回は、GUI 画面の上部のタイトル文字と、GUI 画面の画面サイズを指定しています。
・ つぎに、サンプルコード1と同様、テキストボックスを定義します。.Text() とすると、複数行を入れることのできるテキストボックスを作成できます。また、.place() としたカッコの中で、テキストボックスを表示する座標と、テキストボックスの横縦のサイズを指定しています。
ここで使われている数字は、プログラムを作っていく中で、Python スクリプトを実行していったんGUI 画面を表示させ、数字を変えることでテキストボックスの位置や大きさを調整していきます。ですので、あまり深く考えず、適当に数値を入れてみて、調整していくといった感じで十分です。
・ つぎに、ボタン button1 についても同様に定義します。ボタンを使う場合はこのように書くお約束だという理解でよいです。また、command=… としたところで、冒頭で定義した関数 click1() を呼び出すようにしています。
なお、ボタンが2, 3, …個になる場合は、ボタン名を button2, button3, … とし、呼び出す関数を click2, click3, … などとし、ボタンと関数を追加していけば OK です。
・ button1.place() で、ボタンを配置しています。カッコの中でボタンを配置する座標とサイズを指定しています。
・ 最後に frame1.mainloop() を実行することで、上記で定義したテキストボックス、ボタンを配置した GUI 画面が表示されるようになります。
・ また、GUI 画面の表示中に、ボタンをクリックすると、クリックしたタイミングで click1() 関数が呼び出され、文字列が表示(追加)される動きとなります。
まとめ
Python tkinter の使い方をサンプルコードに基づく形でまとめました。
これで、必要最小限の知識で、動くサンプルを作成できると思います。
他にも tkinter のサンプルを関連リンクなどに入れています。うまく動いたら、参考にしてみてください。