
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を利用すると簡単に作る事ができる。


