【Tkinterの基礎知識】Tkinterの特徴から活用例を徹底解説!?
今回は「Tkinterの基礎知識」と題して、Tkinterの特徴から活用例を徹底解説いたします。これからTkinterについて学びたい、活用例を交えて理解を深めたい方へおすすめです。是非最後までご覧ください。
執筆者 - おすすめの記事3選
そもそもPythonで使われるTkinterとは?
Pythonで使われるTkinterとは、自分独自のGUIを作成するための道具を表します。
要するに、「パソコンの画面上で、画面・アイコン・ボタンなどを自分独自で作り上げるための道具」を意味します。
Tkinterは、Pythonの標準ライブラリとして搭載されるため、簡単に利用できる点で便利です。
※ PyenvのPythonからTkinterを利用する場合、別途インストールすべき手順があります。macを利用していて、PyenvのPythonからTkinterを利用する方は、【もう迷わない!? mac編】Pyenv環境からTkinterをインストールを一読することをおすすめします。
その他のGUI作成サービスと徹底比較
先ほどはPythonで使われるTkinterとは、自分独自のGUIを作成するための道具であることをお伝えしました。
しかしTkinter以外にも自分独自のGUIを作成するための道具はたくさんあります。
そこで「その他のGUI作成サービスと徹底比較」の章では、GUI作成サービスの徹底比較を行います。
まずは各種GUI作成サービスの紹介です。
名称 | 特徴 |
---|---|
Tkinter | Pythonの標準ライブラリとして搭載される。Unix環境の他、Windows上でも利用できる。「ティーキンター」や「ティーケーインター」と呼ばれる。 |
Kivy | Linux、Windows、OS X、Android、iOS、および Raspberry Piで動作します。サポートされるすべてのプラットフォームに対し、同じコードを実行できます。100%無料で利用できます。最新のGUI描画処理システムが構築されているため、ストレスなく開発できます。 |
wxPython | Windows、Mac、Linux、またはその他のUnixシステム上で動かすことができる。2021年06月02日時点で、最新のリリースが2020年11月21日である。C++で記述された道具であるため、高速処理を行うことが可能。 |
PySide | PythonのQtに結びついたもの。2021年06月02日時点で、最新のリリースが2021年1月21日である。 |
基本的にTkinter, Kivy, wxPython, PySideともに、どのプラットフォームにも対応しています。しかしwxPython, PySideに関しては、最新のリリース日から時間が空いているため、機能追加のリリース、修正などの対応は遅いと考えられます。
次にGoogle Trendsを活用して、各種GUI作成サービスの人気動向を比較しました。
圧倒的に「Tkinter」で検索するユーザーが多いですね。
基本的に「検索数が多い = 関心を持つユーザーが多い = 検索結果の件数も多い」ことを意味するので、わからない問題に直面した場合に、最も「Tkinter」に関する記事が多く表示されて、他のGUIサービスよりも問題解決できそうです。
Tkinterを利用するメリット・デメリット
こちらの章ではTkinterを利用するメリット・デメリットに関して解説いたします。
メリット
- 検索数 : その他のGUI作成サービスと比べて検索数が一番多い。検索数が多い = 需要があるため、機能追加・修正の頻度も早く、問題に直面した場合に早期解決が期待できる。
- 公式ドキュメント : 日本語の公式ドキュメントが存在します。かなり丁寧にまとめられているので、大抵の問題は公式ドキュメントを読むと解決できます。
- 導入コスト : Pythonの標準ライブラリとして搭載されるため、簡単に開発に取り組めます。
デメリット
- パーツの数が多いと、コードが煩雑になりやすい。
- その他のGUI作成サービスに比べて機能面が弱く、複雑な機能実装が苦手。
Tkinterで利用できるパーツの紹介
Tkinterを用いて自分独自のGUIを作成する際、いくつかのパーツを組み合わせて作成することになります。
パーツの種類としては、以下の表のようになります。
パーツ名 | 特徴 |
---|---|
Text | 文字を入力、表示できる部品を意味します。別名として、テキストボックスと呼ばれる。 |
entry | Webページやアプリの会員登録、お問い合わせ画面などで利用されるテキストボックスとして利用する。 |
canvas | 様々な図形や画像を描画するために利用する。 |
listbox | 複数の選択肢の中から、1つ以上を選ぶときに使われる入力フォームに利用する。 |
spinbox | Webページやアプリの会員登録、お問い合わせ画面などで利用されるテキストボックスに、右側へ上下のボタンが付いたものとして利用する。 |
scrollbar | パソコン操作画面の右側または下側に表示される棒状の操作ツールとして利用する。 |
scale | ファイルのダウンロード状況やタスクの進捗などを視覚化したものとして利用する。 |
menubutton | menubuttonを選択すると、様々なmenuを展開できる入れ物として利用する。 |
menubar | パソコン上(うえ)に表示される選択肢として利用する。 |
radiobutton | 複数の選択肢の中から、1つを選ぶときに使われる入力フォームとして利用する。 |
checkbutton | 選択するとレ点(チェックマーク)が付く、見た目が四角な部品として利用する。 |
labelframe | 1つ以上のWidgetを取りまとめるもの = Frameとして利用する。 |
frame | 1つ以上のWidgetを取りまとめるもの = Frameとして利用する。 |
panedwindow | 1つ以上のWidgetを取りまとめて、自由にWidgetの大きさを変更できるもの。 |
button | Webページやアプリ内で利用されるようなボタン。 |
label | 文字や画像などを表示するために利用する。 |
optionmenu | optionmenuを選択すると、様々な選択肢を表示する入れ物として利用する。 |
combobox | 様々な選択肢を表示して選んだり、文字入力できるテキストボックス。 |
scrolledtext | テキストボックスにscrollbarをとりつけたものとして利用する。 |
progressbar | ファイルのダウンロード状況やタスクの進捗などを視覚化するものとして利用する。 |
treeview | データを階層化して、表を作成するために利用する。 |
その中で今回はよく利用されるbutton、label、Textを、コードを交えて紹介いたします。
button
「Webページやアプリ内で利用されるようなボタン」として利用します。例えば以下のようにコードを記述すると、
1import tkinter as tk
2
3class Application(tk.Frame):
4 def __init__(self, master=None):
5 # Windowの初期設定を行う。
6 super().__init__(master)
7
8 # Windowの画面サイズを設定する。幅300, 高さ200の画面サイズとする。
9 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
10 self.master.geometry("300x200")
11
12 # Windowを親要素として、frame Widget(Frame)を作成する。
13 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
14 frame = tk.Frame(self.master)
15
16 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
17 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
18 frame.pack()
19
20 # frame Widget(Frame)を親要素として、button Widgetを作成する。
21 # text : テキスト情報
22 # width : 幅の設定
23 # height : 高さの設定
24 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/
25 button = tk.Button(frame, text="button", width=10, height=5)
26
27 # frame Widget(Frame)を親要素とした場合に、button Widgetをどのように配置するのか?
28 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
29 button.pack()
30
31# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
32if __name__ == "__main__":
33 # Windowを生成する。
34 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
35 root = tk.Tk()
36
37 app = Application(master=root)
38
39 # Windowをループさせて、継続的にWindow表示させる。
40 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
41 app.mainloop()
以下の画像のようにbuttonが作成されます。
またbutton = tk.Button(frame, text="button", width=10, height=5)
箇所を以下のように書き換えると、
1# 別解法 ##########################
2# button = tk.Button(frame)
3# button.config(text="button", width=10, height=5, foreground='red') or button.configure(text="button", width=10, height=5, foreground='red')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6button = tk.Button(frame, text="button", width=10, height=5, foreground='red')
以下の画像のようにbuttonが作成されます。
さらにbutton = tk.Button(frame, text="button", width=10, height=5)
箇所を以下のように書き換えると、
1# 別解法 ##########################
2# button = tk.Button(frame)
3# button.config(text="button", width=10, height=5, font=("", 20, "underline")) or button.configure(text="button", width=10, height=5, font=("", 20, "underline"))
4##################################
5# fontについて : https://kuroro.blog/python/RZNjLl36upkumxwkTRWl/
6button = tk.Button(frame, text="button", width=10, height=5, font=("", 20, "underline"))
以下の画像のようにbuttonが作成されます。
buttonに関して詳しく知りたい場合は、以下のTkinterで使われるbuttonとは?コード例を交えて実践的な活用方法を解説を参考にすると、理解が深まります。
label
「文字や画像などを表示する」ために利用します。例えば以下のようにコードを記述すると、
1import tkinter as tk
2
3class Application(tk.Frame):
4 def __init__(self, master=None):
5 # Windowの初期設定を行う。
6 super().__init__(master)
7
8 # Windowの画面サイズを設定する。幅300, 高さ200の画面サイズとする。
9 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
10 self.master.geometry("300x200")
11
12 # label Widgetを作成する。
13 # text : テキスト情報
14 # width : 幅の設定
15 # height : 高さの設定
16 # bg : 背景色の設定
17 # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
18 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
19 label = tk.Label(text="testtest", width=30, height=15, bg="purple")
20
21 # Windowを親要素とした場合に、label Widgetをどのように配置するのか?
22 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
23 label.pack()
24
25# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
26if __name__ == "__main__":
27 # Windowを生成する。
28 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
29 root = tk.Tk()
30
31 app = Application(master=root)
32
33 # Windowをループさせて、継続的にWindow表示させる。
34 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
35 app.mainloop()
以下の画像のようにlabelが作成されます。
またlabel = tk.Label(text="testtest", width=30, height=15, bg="purple")
箇所を以下のように書き換えると、
1# 別解法 ##########################
2# label = tk.Label()
3# label.config(text="1", width=30, height=15, bg="red") or label.configure(text="1", width=30, height=15, bg="red")
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6label = tk.Label(text="1", width=30, height=15, bg="red")
以下の画像のようにlabelが作成されます。
さらにlabel = tk.Label(text="testtest", width=30, height=15, bg="purple")
箇所を以下のように書き換えると、
1# 別解法 ##########################
2# label = tk.Label()
3# label.config(text="1", width=30, height=15, bg="red", bd=20, relief=tk.GROOVE) or label.configure(text="1", width=30, height=15, bg="red", bd=20, relief=tk.GROOVE)
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6label = tk.Label(text="1", width=30, height=15, bg="red", bd=20, relief=tk.GROOVE)
以下の画像のようにlabelが作成されます。
labelについて詳しく知りたい場合は、以下の【初学者必見!?】Tkinterで使われるlabelの活用方法を徹底解説を参考にすると、理解が深まります。
Text
「文字を入力、表示できる部品」として利用します。例えば以下のようにコードを記述すると、
1import tkinter as tk
2
3class Application(tk.Frame):
4 # text Widgetに関する情報を格納する変数
5 text = None
6
7 def __init__(self, master=None):
8 # Windowの初期設定を行う。
9 super().__init__(master)
10
11 # Windowの画面サイズを設定する。幅300, 高さ200の画面サイズとする。
12 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
13 self.master.geometry("300x200")
14
15 # Windowを親要素として、frame Widget(Frame)を作成する。
16 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
17 frame = tk.Frame(self.master)
18
19 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
20 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
21 frame.pack()
22
23 # frame Widget(Frame)を親要素として、text Widgetを作成する。
24 # Textについて : https://kuroro.blog/python/bK6fWsP9LMqmER1CBz9E/
25 self.text = tk.Text(frame)
26
27 # frame Widget(Frame)を親要素とした場合に、text Widgetをどのように配置するのか?
28 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
29 self.text.pack()
30
31# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
32if __name__ == "__main__":
33 # Windowを生成する。
34 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
35 root = tk.Tk()
36
37 app = Application(master=root)
38
39 # Windowをループさせて、継続的にWindow表示させる。
40 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
41 app.mainloop()
以下の画像のようにTextが作成されます。
またself.text = tk.Text(frame)
箇所を以下のように書き換えると、
1# 別解法 ##########################
2# self.text = tk.Text(frame)
3# self.text.config(background='red') or self.text.configure(background='red')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.text = tk.Text(frame, background='red')
以下の画像のようにTextが作成されます。
さらにself.text = tk.Text(frame)
箇所を以下のように書き換えると、
1# 別解法 ##########################
2# self.text = tk.Text(frame)
3# self.text.config(foreground='red') or self.text.configure(foreground='red')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.text = tk.Text(frame, foreground='red')
以下の画像のようにTextが作成されます。
Textについて詳しく知りたい場合は、以下のTkinterで使われるtext Widgetとは?コードを交えて徹底解説!?を参考にすると、理解が深まります。
まとめ
- Tkinterとは、パソコンの画面上で、画面・アイコン・ボタンなどを自分独自で作り上げるための道具を意味します。
参考文献
- Tkinterについて
- GUIとは?
- 標準ライブラリとは?
- Pyenvとは?
- Unix環境とは?
- プラットフォームとは?
- Qtとは?
- Google Trendsとは?
- Tkinter公式ドキュメント
- Kivyドキュメント
- wxPython公式ドキュメント
- PySide公式ドキュメント
- テキストボックスとは?
- 入力フォームとは?
- menuとは?
- レ点(チェックマーク)とは?
- scrollbarとは?
- 階層化とは?