Python Pillow Tkinter,销毁图像,

0 投票
1 回答
5648 浏览
提问于 2025-04-19 01:48

我最近在玩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()

相关问题:

1 个回答

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

撰写回答