2014-08-31 81 views
0

因此我一直在修補Tkinter和Pillow爲我的一個項目,迄今爲止拿出了一個可點擊的圖像。當我點擊圖像它打印圖像已被點擊。不過,我希望圖像在文本顯示之前被破壞。我試過img.destroy()但拋出和錯誤說img沒有定義,所以我懷疑問題是,我不明白事情已被重命名等等。任何和所有幫助感激:)Python枕頭Tkinter,破壞圖像,

from tkinter import * 
from PIL import Image, ImageTk 

SWH = Tk() 

SWH.geometry("1024x950+130+0") 
SWH.title("ServiceWhiz.") 

def printimage(): 
    load = Image.open("hello.gif") 
    render = ImageTk.PhotoImage(load) 

    img = Button(SWH, image=render,command=imgpress) 
    img.image = render 
    img.place(x=0,y=0) 
    return; 

def imgpress(): 
    img.destroy() 
    Label1 = Label(SWH, text="Image has been clicked",fg="#0094FF",font=('Arial',20)).pack() 
    return; 

SWTitle = Label(SWH, text="ServiceWhiz.",fg="#0094FF",font=('Arial',20)).pack() 
MyButtonTest = Button(SWH, text="Click Me.",fg="White",bg="#0094FF",command=printimage).pack() 

回答

1

您需要定義「IMG」你printimage函數的變量外(同一層太陽能熱水上)。如果你在函數內部定義了img,那麼只能在那裏訪問它。通過添加global img我們指定函數內部的img應該引用該全局級別的值。這樣做是一個普遍不好的想法,所以考慮將你的處理程序轉移到將保留狀態並存儲img的類中。

儘量讓這樣的:

from tkinter import * 
from PIL import Image, ImageTk 

SWH = Tk() 

SWH.geometry("1024x950+130+0") 
SWH.title("ServiceWhiz.") 

img = None 

def printimage(): 
    global img 
    load = Image.open("hello.gif") 
    render = ImageTk.PhotoImage(load) 

    img = Button(SWH, image=render,command=imgpress) 
    img.image = render 
    img.place(x=0,y=0) 
    return; 

def imgpress(): 
    global img 
    img.destroy() 
    Label1 = Label(SWH, text="Image has been clicked",fg="#0094FF",font=('Arial',20)).pack() 
    return; 

SWTitle = Label(SWH, text="ServiceWhiz.",fg="#0094FF",font=('Arial',20)).pack() 
MyButtonTest = Button(SWH, text="Click Me.",fg="White",bg="#0094FF",command=printimage).pack() 
+0

完美:)非常感謝您的回答,我現在明白不必讓全球而不是功能限制內的邏輯。非常感謝:) – 2014-08-31 19:41:30

+0

雖然不建議使用全局變量,但可以使用__init __(self)代替(可能更安全) – W1ll1amvl 2014-08-31 20:29:55