2.27 複数のサブウィンドウ(wm_deiconify、deiconify、lift、tkraise、focus_force)
複数のサブウィンドウを作成することができます。サブウィンドウもシステムから見ればメインウィンドウと同じウィンドウとして動作するので、作成するときにシステムに明示的にそのスタック順(表示順)を指定しないと、動作が不定になります。
アプリケーションでウィンドウのスタック順を指定するには 1.20 項および 2.20 項で説明した Wm クラスの「wm_deiconify」または「deiconify」メソッド、1.25 項および 2.25 項で説明した Misc クラスの「lift」または「tkraise」メソッドを用います。1.20 表示状態の制御および2.20 表示状態の制御、1.25 前面、背面表示および2.25 前面、背面表示、2.1 サブウィンドウの作成を参照して下さい。
次のプログラムは「sub」と「sub2」の二つのサブウィンドウを作成して表示しています。「update」メソッドでイベント処理の待機後、「wm_deiconify」メソッドで最初に「root」ウィンドウを、次いで「sub」、「sub2」ウィンドウをスタックしています。「sub2」ウィンドウが「sub」ウィンドウの前面に表示されます。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
sub = tk.Toplevel(root, width=300, height=200, bg='red') | |
sub.geometry('+140+120') | |
sub2 = tk.Toplevel(root, width=300, height=200, bg='yellow') | |
sub2.geometry('+160+140') | |
root.update() | |
root.wm_deiconify() | |
sub.wm_deiconify() | |
sub2.wm_deiconify() | |
root.mainloop() |
プログラムを実行すると、最初にメインウィンドウが表示されます。次いで、赤色のサブウィンドウ「sub」、黄色のサブウィンドウ「sub2」がそれぞれの前面に表示されます。
次のプログラムは上と同様に「sub」と「sub2」の二つのメインウィンドウを作成して表示しています。最初に「lift」メソッドで「sub2」ウィンドウを前面に表示した後に、同様に「lift」メソッドで「sub」ウィンドウを前面に表示しています。最前面に表示した「sub」ウィンドウに「focus_force」メソッドでフォーカスを設定しています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
sub = tk.Toplevel(root, width=300, height=200, bg='red') | |
sub.geometry('+140+120') | |
sub2 = tk.Toplevel(root, width=300, height=200, bg='yellow') | |
sub2.geometry('+160+140') | |
root.update() | |
root.wm_deiconify() | |
sub2.lift() | |
sub.lift() | |
sub.focus_force() | |
root.mainloop() |
プログラムを実行すると、最初にメインウィンドウが表示されます。次いで、黄色のサブウィンドウ「sub2」、赤色のサブウィンドウ「sub」がそれぞれの前面に表示されます。