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」メソッドでメインウィンドウをアクティブにしています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
labelframe = tk.LabelFrame(root, bg='yellow', | |
text='labelframe', labelanchor='n') | |
labelframe.place(x=0, y=0, width=200, height=150) | |
labelframe_0 = tk.LabelFrame(root, bg='pink', | |
text='labelframe_0', labelanchor='n', | |
container=True) | |
labelframe_0.place(x=20, y=20, width=200, height=160) | |
sub = tk.Toplevel(root, bg='red', use=labelframe_0.winfo_id()) | |
labelframe_1 = tk.LabelFrame(sub, bg='green', | |
text='labelframe_1', labelanchor='n') | |
labelframe_1.place(x=20, y=20, width=100, height=100) | |
root.update() | |
sub.wm_attributes('-transparentcolor', 'green') | |
sub.wm_attributes('-alpha', 0.8) | |
root.wm_deiconify() | |
root.mainloop() |
このプログラムを実行すると、下図のように赤色のラベルフレーム(サブウィンドウ)が透けて表示され、その上に配置した緑色のラベルフレームが透明になり下の黄色のラベルフレームが見えるようになります。
