【问题标题】:Python Pillow Tkinter, destroy image,Python Pillow Tkinter,破坏图像,
【发布时间】:2014-08-31 10:09:09
【问题描述】:

所以我一直在为我的一个项目修改 Tkinter 和 Pillow,到目前为止已经想出了一个可点击的图像。当我单击它打印的图像时,图像已被单击。但是我希望图像在显示文本之前被破坏。我已经尝试过 img.destroy() 但是会抛出错误并说 img 没有定义所以我怀疑问题是我不明白事情在哪里被重命名等等。非常感谢任何和所有帮助:)

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()

【问题讨论】:

    标签: python image tkinter destroy pillow


    【解决方案1】:

    您需要在 printimage 函数之外定义“img”变量(与 SWH 位于同一层)。如果您在函数内部定义了 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()
    

    【讨论】:

    • 完美 :) 非常感谢您的回答,我现在明白了必须使其成为全局而不是限制在函数内的逻辑。非常感谢:)
    • 不建议使用全局变量,可以使用 __init__(self) 代替,(可能更安全)
    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    相关资源
    最近更新 更多