Tkinterで使われるWindowって?どのように活用するのか徹底解説!?
今回はTkinterで使われるWindowに関して、活用法からメインWindow, サブWindowの違い等をまとめました。なんとなくWindowを使っていた、Windowの利用法を深く知りたい方へおすすめです。ぜひ最後までご覧ください。
執筆者 - おすすめの記事3選
そもそもTkinterで使われるWindowとは?
Tkinterで使われるWindowとは、Tkinter画面全体を意味します。
言葉だけでは、Windowに関してイメージしづらいですね。。以下の「Tkinterの構成要素」を確認しながら、理解を深めましょう。
Tkinterの構成要素
Tkinterの構成要素として、Window, Frame, Widgetの概念が存在します。
名称 | 説明文 |
---|---|
Window | 画像における黄緑色枠の部分になります。Tkinter画面全体を表します。 |
Frame | 画像におけるピンク色枠になります。Widgetが1つ以上あった場合に、取りまとめるものです。 |
Widget | 紫色枠で囲まれている部分になります。1つの機能を持つ最小単位 = Widgetと考えると良いでしょう。 |
要するに、黄緑色枠で囲まれる箇所を、Windowと呼び、Tkinterを実装することになります。
Tkinterで活用されるWindowの定義
Windowは、
1import tkinter as tk
2
3# Windowを生成する。
4tk.Tk()
で定義されます。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7 # Windowをループさせて、継続的にWindowを表示させる。
8 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
9 root.mainloop()
10
11# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
12if __name__ == "__main__":
13 getWindow()
以下の画像のように、Windowを表示します。
メインWindowとサブWindowの違い
先ほどはtk.Tk()を活用することで、Windowを作成する旨をお伝えしました。
しかし、Windowを複数生成する場合のお話は、していませんでした。
Windowを複数生成する場合、
- 根幹のWindowとして生成されるものをメインWindow
- メインWindowに紐づいて生成されるWindowをサブWindow
と呼びます。
メインWindow, サブWindowはそれぞれ
1import tkinter as tk
2
3# メインWindowを生成する。
4tk.Tk()
1import tkinter as tk
2
3# サブWindowを生成する。
4# tk.Toplevel()について : https://kuroro.blog/python/kEE4RwgYN45V0lM92SDM/
5tk.Toplevel()
で定義されます。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# 複数Windowを取得する関数
4def getMultiWindow():
5 # メインWindowの生成
6 root = tk.Tk()
7 # メインWindowに紐づく、サブWindowを生成する。
8 tk.Toplevel()
9
10 # メインWindowをループさせて、継続的にメインWindowを表示させる。
11 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
12 root.mainloop()
13
14# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
15if __name__ == "__main__":
16 getMultiWindow()
以下の画像のように、メインWindow, サブWindowを表示します。
一見するとメインWindow、サブWindowともに同じように感じますね。ただメインWindowを閉じると、サブWindowも閉じられますが、サブWindowを閉じてもメインWindowは閉じられない点で異なります。(メインWindowを閉じた場合にサブWindowも閉じられるのは、メインWindowにサブWindowが紐づいているからです)
tk.Toplevel()に関しては、Tkinterで使われるtoplevelとは?Windowの説明を交えて徹底解説で総括していますので、詳しく知りたい方は是非ご確認ください。
Windowを装飾する関数の紹介【8種類】
TkinterではWindowを装飾するための関数として、
- geometry
- title
- resizable
- maxsize
- minsize
- destroy
- withdraw
- config
の8種類が用意されています。順にみていきましょう。
geometry
geometry関数を利用すると、Windowの位置や大きさを調整できます。
1# width : アプリ画面(Window)の幅
2# height : アプリ画面(Window)の高さ
3# xPoint : パソコン画面の左上隅を原点(0, 0)とした、x座標
4# yPoint : パソコン画面の左上隅を原点(0, 0)とした、y座標
5# 原点とは? : http://kentiku-kouzou.jp/suugaku-genten.html
6# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
7.geometry(widthxheight+xPoint+yPoint")
で定義されます。戻り値はありません。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7
8 # width : アプリ画面(Window)の幅 500
9 # height : アプリ画面(Window)の高さ 300
10 # xPoint : パソコン画面の左上隅を原点(0, 0)とした、x座標 550
11 # yPoint : パソコン画面の左上隅を原点(0, 0)とした、y座標 200
12 # 原点とは? : http://kentiku-kouzou.jp/suugaku-genten.html
13 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
14 root.geometry("500x300+550+200")
15
16 # Windowをループさせて、継続的にWindowを表示させる。
17 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
18 root.mainloop()
19
20# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
21if __name__ == "__main__":
22 getWindow()
以下の画像のようにWindowを描画します。
geometry関数に関して詳しく知りたい場合は、Tkinterで使われるgeometryとは?コードを通して活用方法を徹底解説の記事をご確認ください。
title
title関数を利用すると、Windowへtitleを設定できます。
1# 第一引数 : タイトル名
2.title('タイトル名')
で定義されます。戻り値はありません。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7
8 # 第一引数 : タイトル名
9 root.title('testtest')
10
11 # Windowをループさせて、継続的にWindowを表示させる。
12 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
13 root.mainloop()
14
15# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
16if __name__ == "__main__":
17 getWindow()
以下の画像のようにWindowを描画します。
resizable
resizable関数を利用すると、マウスカーソルを活用して、Windowを引っ張る際に、Windowの幅・高さを拡大 or 縮小できるようにすべきか設定できます。
1# width : マウスカーソルを活用して、Windowを引っ張る際に、Windowの幅を拡大 or 縮小すべきか設定。True(幅の拡大・縮小可、デフォルト), False(幅の拡大・縮小不可)
2# height : マウスカーソルを活用して、Windowを引っ張る際に、Windowの高さを拡大 or 縮小すべきか設定。True(高さの拡大・縮小可、デフォルト), False(高さの拡大・縮小不可)
3.resizable(width=True or False, height=True or False)
で定義されます。戻り値はありません。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7
8 # マウスカーソルを活用して、Windowを引っ張る場合に、Windowの幅・高さともに、拡大 or 縮小できないように設定する。
9 root.resizable(width=False, height=False)
10
11 # Windowをループさせて、継続的にWindowを表示させる。
12 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
13 root.mainloop()
14
15# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
16if __name__ == "__main__":
17 getWindow()
以下の画像のように、Windowの幅・高さともに、拡大・縮小できないように描画します。
maxsize
maxsize関数を利用すると、Windowの最大幅・最大の高さを設定できます。
1# maxsize : Windowの最大幅・最大の高さを設定する。
2# 第一引数 : 最大幅(正の整数)
3# 第二引数 : 最大の高さ(正の整数)
4.maxsize(最大幅(正の整数), 最大の高さ(正の整数))
で定義されます。戻り値はありません。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7
8 # maxsize : Windowの最大幅・最大の高さを設定する。
9 # 第一引数 : 最大幅(正の整数)
10 # 第二引数 : 最大の高さ(正の整数)
11 root.maxsize(400, 300)
12
13 # Windowをループさせて、継続的にWindowを表示させる。
14 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
15 root.mainloop()
16
17# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
18if __name__ == "__main__":
19 getWindow()
以下の画像のように、Windowを幅400, 高さ300まで広げられます。
minsize
minsize関数を利用すると、Windowの最小幅・最小の高さを設定できます。
1# minsize : Windowの最小幅・最小の高さを設定する。
2# 第一引数 : 最小幅(正の整数)
3# 第二引数 : 最小の高さ(正の整数)
4.minsize(最小幅(正の整数), 最小の高さ(正の整数))
で定義されます。戻り値はありません。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7
8 # minsize : Windowの最小幅・最小の高さを設定する。
9 # 第一引数 : 最小幅(正の整数)
10 # 第二引数 : 最小の高さ(正の整数)
11 root.minsize(100, 200)
12
13 # Windowをループさせて、継続的にWindowを表示させる。
14 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
15 root.mainloop()
16
17# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
18if __name__ == "__main__":
19 getWindow()
以下の画像のように、Windowを幅100, 高さ200まで小さくできます。
destroy
destroy関数を利用すると、Windowを閉じられます。
1# Windowを閉じる関数
2.destroy()
で定義されます。戻り値はありません。
例えば以下のようなコードを作成して、
1import tkinter as tk
2
3# ボタンを選択した場合に実行される関数
4def quit():
5 # Windowを閉じる。
6 root.destroy()
7
8# Windowの生成
9root = tk.Tk()
10
11# Windowを親要素として、button Widgetを作成する。
12# text : テキスト情報
13# command : ボタンを選択した場合に、実行する関数を設定する。quitとする。
14# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/
15button = tk.Button(root, text='quit button', command=quit)
16
17# Windowを親要素として、button Widgetをどのように配置するのか?
18# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
19button.pack()
20
21# Windowをループさせて、継続的にWindowを表示させる。
22# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
23root.mainloop()
ボタンを選択すると、Windowを閉じられます。
withdraw
withdraw関数を利用すると、Windowをパソコン画面から非表示にできます。
1# Windowをパソコン画面から非表示にする。
2.withdraw()
で定義されます。戻り値はありません。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7
8 # Windowをパソコン画面から非表示にする。
9 root.withdraw()
10
11 # Windowをループさせて、継続的にWindowを表示させる。
12 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
13 root.mainloop()
14
15# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
16if __name__ == "__main__":
17 getWindow()
Windowをパソコン画面から非表示にできます。
config
config関数を利用すると、Windowで用意されているoptionを設定できます。
Windowで用意されているoptionとは、Windowの詳細設定を行うものです。
1# Windowで用意されているoptionを設定する。
2# 第一引数以降(任意)
3.config(option1, option2, ...)
で定義されます。戻り値はありません。
※ Windowで用意されているoptionの種類一覧を調べたい場合は、以下のようにコードを記述してご確認ください。
1import tkinter as tk
2
3# Windowを生成する。
4root = tk.Tk()
5# Windowで用意されているoptionの種類一覧を取得する。
6print(root.keys())
例えば以下のようなコードを作成すると、
1import tkinter as tk
2
3# Windowを取得する関数
4def getWindow():
5 # Windowの生成
6 root = tk.Tk()
7
8 # Windowで用意されているoptionを設定する。
9 # background : Windowの背景色を設定。赤色にする。
10 # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
11 root.config(background='red')
12
13 # Windowをループさせて、継続的にWindowを表示させる。
14 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
15 root.mainloop()
16
17# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
18if __name__ == "__main__":
19 getWindow()
以下の画像のようにWindowの背景色を赤色にします。
background optionなどで設定される、色に関しては、Tkinterの色の使い方とは?活用例から色の一覧をまとめて紹介!?で総括していますので、詳しく知りたい方は是非ご確認ください。
各種optionの利用方法に関しては、Tkinterで使われるtoplevelとは?Windowの説明を交えて徹底解説の「toplevel関数で使われるoption」箇所で解説していますので、是非ご確認ください。
まとめ
- Tkinterで使われるWindowとは、Tkinter画面全体を意味します。
- 複数Windowを生成する場合、根幹のWindowとして生成されるものをメインWindow、メインWindowに紐づいて生成されるWindowをサブWindowと呼ぶ。