2015-08-30 88 views
0

我試圖在圖像上顯示一個按鈕。按鈕看起來像在圖像的前面。 如何將圖像設置爲應用程序的背景? 按鈕也需要改變他的位置,所以圖像應該是永久的。使用Tkinter的背景圖像 - Python 2.7

我的代碼:

from Tkinter import * 

class App: 
def __init__(self,master): 
    frame = Frame(master) 
    master.geometry("400x200") 
    frame.pack() 

    self.hello_b = Button(master,text="ME",command=sys.exit, height=1, width=3,fg= "blue",bg = "green") 
    self.hello_b.pack() 


    photo = PhotoImage(file="unnamed.gif") 
    w = Label (master, image=photo) 
    w.place(x=0, y=0, relwidth=1, relheight=1) 
    w.photo = photo 
    w.pack() 


root = Tk() 
app = App(root) 
root.mainloop() 
+0

有幾件事情是錯誤的。有許多代碼與您的問題無關,這意味着您在測試之前編寫了太多代碼。編寫併發布mcve https://stackoverflow.com/help/mcve。您創建並打包了一個未使用的框架。您將帶有照片的標籤放置在您的包裝Button上。然後您再次打包照片。 –

+0

我編輯並清理了一些東西。我希望現在更清楚。 – Orange

+0

我在3.5版中使用.png的實驗表明需要設置w.photo屬性,但這是非常不尋常的,而不是我在tkinter文檔中。你怎麼知道這樣做? –

回答

1

答案,我懷疑,是here:「[代碼]包在一個框架部件一個Label控件,然後在的右上角放置一個按鈕該按鈕將與標籤重疊。「我測試像這樣

from tkinter import * 

class App: 
    def __init__(self,master): 
     master.geometry("400x200") 

     photo = PhotoImage(file="C:/programs/Python34/temimage.png") 
     self.w = w = Label (master, image=photo) 
     w.photo = photo 
     w.pack() 

     self.hello_b = Button(master,text="ME",command=sys.exit, height=1, 
           width=3,fg= "white",bg = "green") 
     self.hello_b.place(x=200, y=5) 

root = Tk() 
app = App(root) 
root.mainloop() 

該按鈕確實在圖像的頂部。 x,y位置似乎是按鈕的左上角。添加

def move(): 
    app.hello_b.place(x=100, y=100) 
root.after(1000, move) 

導致按鈕跳過一秒鐘後,如預期。

+0

非常感謝。我懷疑這是問題,但早先取消了該選項。還有一件事情,如果我可以:按鈕假設在關閉程序時關閉,但它只是使程序崩潰。我如何使sys.exit正常工作(或任何其他方法)? – Orange

+1

root.destroy - 請參閱tkinter的Python參考章節中的示例。 SO上可能還有其他答案。 root.destroy停止root.mainloop。 Python執行文件中後續的任何代碼,如果沒有,則正常退出。直接使用sys.exit是不尋常的。 –