2012-05-03 3 views
0

ボタン、ラベル、テキストボックスなどを持つGUIがあり、デスクトップのように背景画像(エルヴィスの顔など)に配置したかったのです。テキストボックスとラベルがイメージをブロックしないようにしたいと思いますが、テキストはイメージ上にあり、イメージは完全に表示されたままです。助言がありますか?tkinterで背景画像を設定する

答えて

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() 
関連する問題