こんにちは
今回からTkinterを用いてGUIアプリを開発を行っていきます。
Contents
Tkinterとは?
TkinterはPythonに標準搭載されているGUIアプリケーションライブラリです。
TkinterのTkは、Tcl/TkのTkの部分を指しています。
Tcl/Tkは、スクリプト言語であるTclとGUIツールキットであるTkからなる、GUI開発環境のことです。
少しややこしいですが、Tcl言語のGUIツールであるTkをPythonでも使えるようにしたのがTkinterです。
ちなみにPython以外にPerlやRubyでもTkを使ったGUIアプリの開発が行えます。
OSに関しても、Windows、Mac OS、Linuxなどで利用可能な、汎用性の高いツールになっています。
Python環境がない場所で実行するために
GUIアプリケーション化するだけでは、さほど意味がありません。
結局、コマンドラインからコードを走らせるか、VsCodeなどを使ってデバックするだけでは、GUIの便利さが感じられないでしょう。
GUIアプリの利点を最大化するためには、Exe化が不可欠です。
exe化は、「.exe」のファイルのことで、この拡張子になっていれば、利用先のパソコンに開発環境が無くとも動作するようになります。
これが出来れば、アプリだけをシェアしたり、別のパソコンに動かして作業を行うことが可能です。
この記事ではまだ行いませんが、GUIアプリは最終的にexe化すると思っておいてください。
Tkinterの基本
TkinterによるGUIアプリを作る場合のPythonファイルの内部構造を説明します。
基本的にはウィンドウに表示する部分は1つのPythonファイルで完結します。
中身をざっくり説明するとこんな感じ
- ライブラリのインポート
- アプリの宣言
- ウィンドウ内のレイアウト
- アプリの実行
GUIの部分を凝れば凝るほど中身は複雑になってしまうので、内部の処理などは関数化して別のファイルにまとめておくのが良いと思います。

ウィンドウを表示する
それでは早速、Tkinterを実行してみましょう。
開発環境はVsCodeです。
まずは、開発環境にTkinterライブラリを入れます。
pip install Tkinter
次は、VsCodeに移動してウィンドウを表示してみましょう。
コードはこちら
# tkinter_basic_01.py
import tkinter
# windowの作成
root = tkinter.Tk()
# rootの実行
# これだけで×ボタン、ウィンドウの拡大縮小、タイトルが表示される
root.mainloop()

どうでしょう。Tkinterでは、たったの数行で、ウィンドウを出すことが出来ます。
ウィンドウには、①最大最小化、②ウィンドウの削除、③拡大縮小などの機能が備わっており、これらをワンストップで作れる便利さが伝わるかと思います。
Tkinterでは、上記のコードの内側にボタンやラベルなど機能を追加していくことでGUIアプリを作成することが出来ます。
ウィンドウの設定をしてみる
機能を追加する前に、少しだけウィンドウの設定をやってみます。
現状だと、ウィンドウの名前や大きさ、アイコンなどデフォルトの状態になっています。

上記のようにウィンドウを複数表示させることも可能です。
ウィンドウを複数表示できれば、フォルダの選択画面を開いたり、詳細設定の画面を開くなど、出来る幅が広がります。
ちなみにウィンドウの左端にある、ロゴみたいなやつは「ファビコン」と呼ばれ、自作したロゴを入れることができます。
そのファビコンの拡張子は「.ico」なので、jpgなどから変換する必要があります。
変換にはフリーサイトがあるので、こちらで簡単に変更できます。
# tkinter_basic_02.py
import tkinter
# windowの作成
root = tkinter.Tk()
root.title("Main_Window")
root.iconbitmap("favicon.ico") # ファビコンを設定できる
root.geometry("250x250") # ×ではなく、アルファベットのx
root.resizable(0,0) # 00で上下リサイズできなくなる
root.config(bg = "gray") # バックグラウンドカラーを変更する
# 二つ目のウインドウを作成
second = tkinter.Toplevel()
second.title("Second_window")
second.config(bg = "red")
second.geometry("250x250+500+500")
# rootの実行
# これだけで×ボタン、ウィンドウの拡大縮小、タイトルが表示される
root.mainloop()
ラベルに文字を書く(+綺麗にする)
次はウィンドウ内部に文字を入れていきましょう。
文字を入れる際は基本的にラベルを使って書き込んでいきます。
Tkinterではコードが長く複雑になりやすいので、同じ部品がわかりやすいようにすることをおすすめします。
ラベルに限らず、他の要素でも共通ですが、詳細設定には「.config」を使って設定すると綺麗になりやすいです。
私は、要素の「位置」「大きさ」「色」などに分けて記述するようにしています。
# tkinter_basic_03.py
# ラベルの設定
import tkinter
# windowの作成
root = tkinter.Tk()
root.title("Button_Basics")
root.iconbitmap("favicon.ico")
root.geometry("400x700") # ×ではなく、アルファベットのx
root.resizable(0,0) # 00で上下リサイズできなくなる
root.config(bg = "white") # バックグラウンドカラーを変更する
# グリッドでレイアウトを整頓できる
first_button = tkinter.Button(root)
first_button.config(text = "First_Button")
first_button.grid(row = 0, column = 0) # 0,0で配置の基準に
# 1つ目のボタンを基準に右と下に1つ分移動
second_button = tkinter.Button(root)
second_button.config(text = "Second_Button")
second_button.grid(row = 1, column = 1)
# クリックされたら色を変える
third_button = tkinter.Button(root)
third_button.config(text = "Third_Button", activebackground = "red")
third_button.grid(row = 0, column = 2)
# ボタンを整列する
test_1 = tkinter.Button(root, text = "text")
test_2 = tkinter.Button(root, text = "text")
test_3 = tkinter.Button(root, text = "text")
test_4 = tkinter.Button(root, text = "text")
test_5 = tkinter.Button(root, text = "text")
test_6 = tkinter.Button(root, text = "text")
test_1.grid(row = 2, column = 0, pady = 5,padx = 5)
test_2.grid(row = 2, column = 1, pady = 5,padx = 5)
test_3.grid(row = 2, column = 2, pady = 5,padx = 5)
test_4.grid(row = 3, column = 0, pady = 5,padx = 5)
test_5.grid(row = 3, column = 1, pady = 5,padx = 5)
test_6.grid(row = 3, column = 2, pady = 5,padx = 5)
# rootの実行
root.mainloop()
まとめ
今回はTkinerの説明からウィンドウ表示とラベルの実装を行いました。
次回は、ボタンやテキストボックスの実装を行っていきます。