第 4 章 ラベルフレーム

◀ 4.17 ラベルフレームの削除、非表示   【目  次】  4.19 前面、背面表示 ▶

999999

 更新日:


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

4.18 透明度、透過色(container、use、winfo_id、wm_attributes、attributes)

ラベルフレームに全体を透けて見えるようにしたり、特定の色を透明にしたりするメソッドはありませんが、フレームと同様に、「container」オプションと「use」オプションを用いてサブウィンドウをラベルフレームに埋め込むことにより、その機能を実現することができます。「3.15 透明度、透過色」を参照して下さい。


次のプログラムは黄色の背景のラベルフレーム「labelframe」を作成して「place」メソッドでメインウィンドウに配置しています。次いで、ピンク色の背景のラベルフレーム「labelframe_0」を作成して「container」オプションに「True」を指定して、「place」メソッドでメインウィンドウに配置しています。

赤色の背景のサブウィンドウ「sub」をメインウィンドウの子オブジェクトとして作成ます。背景色を赤色として、「use」オプションに「labelframe_0」の識別子を設定します。この設定でサブウィンドウ「sub」はラベルフレーム「labelframe_0」に格納され(埋め込まれ)ます。

透過の設定を見るために緑色の背景のラベルフレーム「labelframe_1」を作成してサブウィンドウ「sub」に配置します。

「update」メソッドでオブジェクトの設定を完了した後、「wm_attributes」メソッドで緑色を透過色に設定し、サブウィンドウの透過度を「0.8」に設定しています。ここで、「wm_attributes」メソッドの実行前に、「update」メソッドを実行するか、「lift」メソッドで「frame_0」の前面に表示しないと、「wm_attributes」メソッドは適用されません。

「wm_deiconify」メソッドでメインウィンドウをアクティブにしています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
labelframe = tk.LabelFrame(root, bg='yellow',
5
        text='labelframe', labelanchor='n')
6
labelframe.place(x=0, y=0, width=200, height=150)
7
labelframe_0 = tk.LabelFrame(root, bg='pink',
8
        text='labelframe_0', labelanchor='n',
9
        container=True)
10
labelframe_0.place(x=20, y=20, width=200, height=160)
11
sub = tk.Toplevel(root, bg='red', use=labelframe_0.winfo_id())
12
labelframe_1 = tk.LabelFrame(sub, bg='green',
13
        text='labelframe_1', labelanchor='n')
14
labelframe_1.place(x=20, y=20, width=100, height=100)
15
root.update()
16
sub.wm_attributes('-transparentcolor', 'green')
17
sub.wm_attributes('-alpha', 0.8)
18
root.wm_deiconify()
19
root.mainloop()

このプログラムを実行すると、下図のように赤色のラベルフレーム(サブウィンドウ)が透けて表示され、その上に配置した緑色のラベルフレームが透明になり下の黄色のラベルフレームが見えるようになります。

A004_LabelFrame_04-18