PythonでGUIアプリを作りたい。
Pythonでのコーディングに慣れてくると、コマンドベースの処理の他にもWEBやGUIアプリケーションを作りたくなる。
今回はPythonでGUIアプリを作る為の「Tkinter」の使い方を紹介する。
Tkinterとは?
GUIアプリがコマンドベースのCUIアプリと異なる点、それはグラフィカルなユーザーインターフェースを持っている事。
- ウィンドウ
- テキストエリア
- ボタン
- 他にも色々
GUIアプリを作る為にはこれらの部品をコードから呼び出さなければならない。
そこで画面の部品を呼び出してくれるのがTkinterである。
Tkinter は Python からGUIを構築・操作するための標準ライブラリ(ウィジェット・ツールキット)である。
Tcl/Tk の Tk 部分を Python で利用できるようにしたもので、使い方も可能な限り Tcl/Tk にあわせられるように作られている。 これにより、スクリプト言語である Python から簡単にGUI画面をもったアプリケーションを作ることが可能になる。
Tkinter - Wikipedia
使い方
主な使い方は以下の通り。
- 部品をインスタンスとして呼び出す
- 部品を親部品と紐づける
- 部品の位置を決めて表示する
- 部品のイベントと処理を紐づける
import tkinter as tk import tkinter.ttk as ttk root = tk.Tk() root.title('Tkinter Test') #処理 def btn1_click(): textarea1.delete('1.0',tk.END) textarea1.insert("1.0", "btn1_click") def btn2_click(): textarea1.delete("1.0",tk.END) textarea1.insert("1.0", "btn2_click") #親フレーム frame_main = ttk.Frame( root, height=200, width=300, borderwidth=5) frame_main.grid() #子フレーム1 frame_sub1 = ttk.Frame( frame_main) frame_sub1.grid(row=0, column=0) #子フレーム2 frame_sub2 = ttk.Frame( frame_main) frame_sub2.grid(row=0, column=1) #ボタン1 btn1 = ttk.Button( frame_sub1, text='Button1', command=btn1_click) btn1.grid(row=0, column=0) #ボタン2 btn2 = ttk.Button( frame_sub1, text='Button2', command=btn2_click) btn2.grid(row=1, column=0) #テキストフィールド textarea1 = tk.Text(frame_sub2, height=10, width=20, wrap=tk.CHAR) textarea1.grid(row=1, column=0, padx=2, pady=2, sticky=tk.NW) #画面を保持し続けるおまじない root.mainloop()
部品をインスタンスとして呼び出す
子フレームの呼び出しを例にすると、frame_sub1
を Frame
クラスのインスタンスとして呼び出しているのがわかる。
#子フレーム1 frame_sub1 = ttk.Frame( frame_main)
他のボタンやテキストフィールド等も同様にインスタンスとして呼び出している。
部品を親部品と紐づける
同じく子フレームの呼び出しを例にすると、frame_sub1
を定義する際の引数に親フレームである frame_main
を指定している。
この操作により、 frame_sub1
は frame_main
に紐づけられた部品として定義される。
#子フレーム1 frame_sub1 = ttk.Frame( frame_main)
部品の位置を決めて表示する
同じく子フレームの呼び出しを例にすると、 grid(row=0, column=0)
によって、親フレームである frame_main
の中をグリッド状に分けて0行目の0列目の位置に表示される。
frame_sub2
は grid(row=0, column=1)
なので0行目の1列目に表示される。
#子フレーム1 frame_sub1 = ttk.Frame( frame_main) frame_sub1.grid(row=0, column=0) #子フレーム2 frame_sub2 = ttk.Frame( frame_main) frame_sub2.grid(row=0, column=1)
部品のイベントと処理を紐づける
ボタンを例にすると、 btn1
を宣言する際に command=btn1_click
と指定する事により、ボタンを押された際に btn1_click()
の処理を実行するようになる。
#処理 def btn1_click(): textarea1.delete("1.0",tk.END) textarea1.insert("1.0", "btn1_click") #ボタン1 btn1 = ttk.Button( frame_sub1, text='Button1', command=btn1_click) btn1.grid(row=0, column=0)
まとめ
- PythonでGUIアプリを作る際はTkinterを利用すると簡単に作る事ができる。