0

ボタン、ラベル、テキスト ボックスなどを備えた gui があり、デスクトップのような背景画像 (エルヴィスの顔など) にすべて配置したいと考えていました。テキスト ボックスとラベルが画像を遮るのではなく、テキストが画像の上にあり、画像が完全に見えるようにしたいのです。助言がありますか?

4

1 に答える 1

1

OK、いくつかの注意点を考慮して、この作業を行いました。まず第一に、私はまだスタイルに慣れていないので、ttk ウィジェットで動作させることを気にしませんでした。次に、これが Windows で機能することはわかっていますが、他のプラットフォームでは機能しないと確信しています。そうは言っても、トリックは、画像の上にトップレベルウィンドウ(私のコードではオーバーレイと呼ばれる)をポップして、透明な色(明らかにWindows Tkでのみ可能)になるように構成してから、ウィジェットをオーバーレイに配置して設定することです背景を透明色に変更します(私のコードではtrans_color)。また、ルートのイベントをトラップ<Configure>して、オーバーレイを所定の位置に保持します。画像については、プロフィール画像を右クリックしてディスクに保存しました (spice.png という名前を付けます)。

from Tkinter import *
#from ttk import *
from PIL import Image, ImageTk

trans_color = '#FFFFFE'

root = Tk()
img = ImageTk.PhotoImage(Image.open('spice.png'))
img_label = Label(root, image=img)
img_label.pack()
img_label.img = img  # PIL says we need to keep a ref so it doesn't get GCed
root.update()
overlay = Toplevel(root)
print 'root.geo=', root.geometry()
geo = '{}x{}+{}+{}'.format(root.winfo_width(), root.winfo_height(),
    root.winfo_rootx(), root.winfo_rooty())
print 'geo=',geo
overlay.geometry(geo)
overlay.overrideredirect(1)
overlay.wm_attributes('-transparent', trans_color)
overlay.config(background=trans_color)

lbl = Label(overlay, text='LABEL')
lbl.config(background=trans_color)
lbl.pack()

def moved(e):
    geo = '{}x{}+{}+{}'.format(root.winfo_width(), root.winfo_height(),
        root.winfo_rootx(), root.winfo_rooty())
    overlay.geometry(geo)

root.bind('<Configure>', moved)

root.mainloop()
于 2012-05-03T22:29:58.580 に答える