ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【python/tkinter】tkinterで簡単なGUIをpythonで作る

 pythonを使っていて時々GUIのアプリを作りたくなる場合があります。
 その際tkinterというpythonに同梱されているライブラリを使えば比較的簡単にGUIを作れることがわかったので、今回はそのtkinterを使ってみた備忘録になります。


 では、始めます。


1:tkinterのインストール方法
 先に書きましたがpythonに同梱されているため、基本的にインストールをする必要がありません。

 tkinterが使えるかどうかの確認は、PowerShellなどを立ち上げてpythonを起動させて以下のコードを実行します。

import tkinter
tkinter._test()

 上記を実行すると以下のようにGUItkinterのバージョンを確認できます。
f:id:rikoubou:20220119155924p:plain

 エラーが発生した場合はtkinterがインストールされていないので、以下のpipコマンドでインストールします。

$ pip3 install pytk


2:tkinterの基本的な考え方
 詳しくは参考資料様のページを見ていただきたいのですが、tkinterは基本的には以下のような構造になっています。
f:id:rikoubou:20220119161905p:plain

 最初にROOTという空のGUI画面にFRAMEという領域を作ります。そしてそのFRAME内の領域にLABELやBUTTONなどの具体的な要素を入れていくという形です。
 FRAMEには配置するためにGRID(htmlのtableのようなイメージ)が設定でき、綺麗に並べることもできます。


3:簡単なGUIを作ってみる
 では実際にtkinterを使って簡単なGUIを作ってみます。

tkinter_sample.py

#-*- coding:utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
from functools import partial


def main():
    # rootの作成
    root = tk.Tk()
    root.title("tkinter_sample")
    root.geometry("300x100")

    # frameの作成
    frame = ttk.Frame(root, padding=10)
    frame.grid(row=2, column=0)

    # ラベルの作成
    label = ttk.Label(frame, text="ここに入力したテキストの内容が表示されます")
    label.grid(row=0, column=0)

    # Entry(1行のテキスト入力行)を作成してframeに追加
    entry = ttk.Entry(frame, width=40)
    entry.grid(row=1, column=0, pady=4)

    # Buttonを作成してframeに追加
    button = ttk.Button(frame, text="表示", command=partial(update_label, entry, label))
    button.grid(row=2, column=0, pady=4)

    # 中央揃え
    root.grid_columnconfigure(0, weight=1)
    root.grid_rowconfigure(0, weight=1)

    root.mainloop()


# ラベルを入力されたテキストの内容で更新
def update_label(entry, label):
    label['text'] = entry.get()


if __name__ == "__main__":
    main()

 このサンプルコードを実行すると以下のようなGUIが表示されます。テキスト入力部分に何かしらを入力して表示ボタンを押下すると、Label部分にそのテキストが表示されます。
f:id:rikoubou:20220119172057p:plain

 buttonが押下された時の呼び出し関数はttkでbuttonを作成する際の「command」の引数に指定します。引数も渡したい場合は「partial」を使って関数名に続いて渡したい引数を指定します。


 以上がtkinterで簡単なGUIを作ってみた内容になります。

 標準ライブラリとして割と簡単にGUIが作れるのは便利だと思います。次はこの作ったGUIをexe化する方法を調べてみようかと思います。


・参考資料