第 2 章 サブウィンドウ

◀ 2.29 ウィンドウハンドルの取得   【目  次】  2.31 モーダルウィンドウの設定 ▶

999999

 更新日:


 このホームページは Amazon Kindle 本の作成中の草稿です。日々、原稿を見直しているので、内容が変わることに留意して読んで下さい。本が出版され次第、このホームページは削除されます。

2.30 ウィンドウの切り替え表示(container、use、winfo_id)

一つのウィンドウを他のウィンドウを格納するコンテナウィンドウとして用い、格納して表示するウィンドウを切り替えることができます。格納されるウィンドウは格納先を指定して表示します。「固有オプション」の「container」と「use」オプションを用います。格納されるウィンドウは格納するウィンドウのサイズで設定されます。

格納先のコンテナウィンドウは Misc クラス の「winfo_id」メソッドで取得したウィンドウの識別子で指定します。詳細は Misc クラスメソッドを参照して下さい。

object.winfo_id()


次のプログラムは、三つのサブウィンドウを作成し、サブウィンドウ「sub」の「container」オプションを「True」にしてコンテナウィンドウにしています。「winfo_id」メソッドで識別子を取得して変数「sid」に代入します。サブウィンドウ「sub2」と「sub3」は「wm_withdraw」メソッドで非表示としています。この設定で最初に、赤色のサブウィンドウ「sub」が表示されます。

各サブウィンドウ「sub」、「sub2」、「sub3」にマウスの左クリックのイベント「<button-1>」に「bind」メソッドで関数「callbind_1」、「callbind_2」、「callbind_3」を関連付けています。

「callbind_1」関数で、サブウィンドウ「sub2」の「use」オプションにコンテナウィンドウ「sub」の識別子「sid」を指定しています。これで、サブウィンドウ「sub」のマウスの左クリックで黄色のサブウィンドウ「sub2」が切り替わって表示されます。

「callbind_2」関数で、サブウィンドウ「sub2」の「use」オプションに空文字を設定して「wm_withdraw」メソッドで非表示としています。「use」オプションに識別子が設定されているとき、「wm_withdraw」メソッドは実行できずエラーになります。次いで、サブウィンドウ「sub3」の「use」オプションにコンテナウィンドウ「sub」の識別子「sid」を指定しています。これで、サブウィンドウ「sub2」のマウスの左クリックで緑色のサブウィンドウ「sub3」が切り替わって表示されます。

「callbind_3」関数で、サブウィンドウ「sub3」の「use」オプションに空文字を設定して「wm_withdraw」メソッドで非表示としています。これで、サブウィンドウ「sub3」のマウスの左クリックで、コンテナウィンドウの赤色のサブウィンドウ「sub」が表示されます。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
sub = tk.Toplevel(root, bg='red', container=True)
5
sub.geometry('300x200+140+120')
6
sid = sub.winfo_id()
7
sub2 = tk.Toplevel(root, bg='yellow')
8
sub3 = tk.Toplevel(root, bg='green')
9
root.update()
10
root.wm_deiconify()
11
sub.wm_deiconify()
12
sub2.wm_withdraw()
13
sub3.wm_withdraw()
14
def callbind_1(event):
15
    sub2['use'] = sid
16
def callbind_2(event):
17
    sub2['use']=''
18
    sub2.wm_withdraw()
19
    sub3['use'] = sid
20
def callbind_3(event):
21
    sub3['use']=''
22
    sub3.wm_withdraw()
23
sub.bind('<button-1>', callbind_1)
24
sub2.bind('<button-1>', callbind_2)
25
sub3.bind('<button-1>', callbind_3)
26
root.mainloop()

プログラムを実行すると、最初にメインウィンドウの前面に赤色のサブウィンドウが表示されます。次いでマウスの左クリックをすると黄色のサブウィンドウ、緑色のサブウィンドウ、赤色のサブウィンドウが順に表示され繰り返されます。表示されるウィンドウは背景色を変えているのではなく、ウィンドウ自体が切り替わっています。