第 3 章 フレーム

◀ 3.13 アンカーによるフレーム表示位置   【目  次】  3.15 透明度、透過色 ▶

999999

 更新日:


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

3.14 フレームの削除、非表示(destroy、place_forget)

フレームを削除するには Frame クラス で定義されている以下の「destroy」メソッドを用います。

object.destroy()
このオブジェクトとオブジェクト上のすべてのウィジェットを破棄します。

備考
オブジェクトが存在しなくてもエラーは返されません。

「destroy」メソッドはオブジェクトを削除して、その後、使用することができません。一時的に非表示にするには、下記の「place_forget」メソッドを用います。詳細は Place クラスメソッド を参照して下さい。

object.place_forget()

このメソッドは「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」メソッドで再表示しています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.wm_geometry('300x200+100+100')
4
frame_1 = tk.Frame(root, bg='red')
5
frame_1.place(x=0, y=0, width=80, height=80)
6
frame_2 = tk.Frame(root, bg='yellow')
7
frame_2.place(relx=0.5, rely=0.5, width=100, height=100,
8
                anchor='center')
9
def click_L(event):
10
    frame_1.destroy()
11
    frame_2.place_forget()
12
def click_R(event):
13
    frame_2.place(relx=0.5, rely=0.5, width=100, height=100,
14
                anchor='center')
15
root.bind('<Button-1>', click_L)
16
root.bind('<Button-3>', click_R)
17
root.mainloop()

このプログラムを実行すると、下図のように指定した座標にフレームが表示されます。

A003_Frame_03-13

上図のウィンドウをマウスで左クリックすると、2 つのフレームは非表示となります。次いで、マウスの右クリックをすると中央の黄色のフレームが表示され、赤色のフレームは削除されているので表示されません。マウスの左クリックと右クリックを繰り返すと、中央の黄色のフレームが非表示と表示を繰り返します。