3.14 フレームの削除、非表示(destroy、place_forget)
フレームを削除するには Frame クラス で定義されている以下の「destroy」メソッドを用います。
備考
オブジェクトが存在しなくてもエラーは返されません。
「destroy」メソッドはオブジェクトを削除して、その後、使用することができません。一時的に非表示にするには、下記の「place_forget」メソッドを用います。詳細は Place クラスメソッド を参照して下さい。
このメソッドは「place_configure」または「place」メソッドで表示されているフレームは非表示になりますが、同時にオプションで設定した値もデフォルト値になります。再表示するには、オプションを設定した「place_configure」または「place」メソッドを実行します。
次のプログラムは赤色の背景の「fram_1」と黄色の背景の「frame_2」を作成して「place」メソッドでメインウィンドウに配置しています。メインウィンドウにマウスの左クリックの「<button-1>」に「bind」メソッドで関数「click_L」を、マウスの右クリックの「<button-3>」に「bind」メソッドで関数「click_R」を関連付けています。
「click_L」関数で、「frame_1」を「destroy」メソッドで削除し、「frame_2」を「place_forget」メソッドで非表示としています。
「click_R」関数で、「frame_2」を「place」メソッドで再表示しています。
import tkinter as tk | |
root = tk.Tk() | |
root.wm_geometry('300x200+100+100') | |
frame_1 = tk.Frame(root, bg='red') | |
frame_1.place(x=0, y=0, width=80, height=80) | |
frame_2 = tk.Frame(root, bg='yellow') | |
frame_2.place(relx=0.5, rely=0.5, width=100, height=100, | |
anchor='center') | |
def click_L(event): | |
frame_1.destroy() | |
frame_2.place_forget() | |
def click_R(event): | |
frame_2.place(relx=0.5, rely=0.5, width=100, height=100, | |
anchor='center') | |
root.bind('<Button-1>', click_L) | |
root.bind('<Button-3>', click_R) | |
root.mainloop() |
このプログラムを実行すると、下図のように指定した座標にフレームが表示されます。
上図のウィンドウをマウスで左クリックすると、2 つのフレームは非表示となります。次いで、マウスの右クリックをすると中央の黄色のフレームが表示され、赤色のフレームは削除されているので表示されません。マウスの左クリックと右クリックを繰り返すと、中央の黄色のフレームが非表示と表示を繰り返します。