KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
Tkinterで使われるWindowって?どのように活用するのか徹底解説!?

Tkinterで使われるWindowって?どのように活用するのか徹底解説!?

今回はTkinterで使われるWindowに関して、活用法からメインWindow, サブWindowの違い等をまとめました。なんとなくWindowを使っていた、Windowの利用法を深く知りたい方へおすすめです。ぜひ最後までご覧ください。

目次
  1. そもそもTkinterで使われるWindowとは?
    1. Tkinterの構成要素
  2. Tkinterで活用されるWindowの定義
  3. メインWindowとサブWindowの違い
  4. Windowを装飾する関数の紹介【8種類】
    1. geometry
    2. title
    3. resizable
    4. maxsize
    5. minsize
    6. destroy
    7. withdraw
    8. config
  5. まとめ
  6. 参考文献
目次を開く⬇︎

そもそも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と呼ぶ。

参考文献