如何通过鼠标单击在tkinter中更改图像?

时间:2019-04-06 17:45:01

标签: python tkinter

我一直在努力使我的代码正常工作。我的目标是打开图像,然后单击按钮或仅按一个键,图像应移至下一张图像。 下面是我尝试过的代码,但是它无法正常工作,我无法提出一种更好的方法来解决此问题...

import tkinter as tk
from PIL import Image, ImageTk

class ExampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.x = self.y = 0
        self.canvas = tk.Canvas(self, width=700, height=700, cursor="cross")
        self.canvas.pack(side="top", fill="both", expand=True)
        self.image = Image.open("C:\\Users\\Laptop\\Desktop\\test2.jpg").resize((400,400))
        self.photo = ImageTk.PhotoImage(self.image)
        self.canvas.create_image((0, 0), anchor="nw", image=self.photo)

    def update(self):
        self.image = Image.open("C:\\Users\\Laptop\\Desktop\\test2.jpg").resize((400,400))
        self.photo = ImageTk.PhotoImage(self.image)
        self.canvas.create_image((0, 0), anchor="nw", image=self.photo)

if __name__ == "__main__":
    app = ExampleApp()
    app.mainloop()
    app.update()

如果有人可以帮助我,那将太好了:D

1 个答案:

答案 0 :(得分:0)

当您单击画布时,此代码会更改图像(不仅是图像)。

我在self.bind('<Button-1>', self.update)中仅添加了eventdef update()

我使用变量IMG1IMG2只是为了轻松地用我的文件替换文件。

import tkinter as tk
from PIL import Image, ImageTk

IMG1 = "C:\\Users\\Laptop\\Desktop\\test2.jpg"
IMG2 = "C:\\Users\\Laptop\\Desktop\\test2.jpg"

class ExampleApp(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.x = self.y = 0
        self.canvas = tk.Canvas(self, width=700, height=700, cursor="cross")
        self.canvas.pack(side="top", fill="both", expand=True)

        self.image = Image.open(IMG1).resize((400,400))
        self.photo = ImageTk.PhotoImage(self.image)
        self.canvas.create_image((0, 0), anchor="nw", image=self.photo)

        self.bind('<Button-1>', self.update)

    def update(self, event):
        self.image = Image.open(IMG2).resize((400,400))
        self.photo = ImageTk.PhotoImage(self.image)
        self.canvas.create_image((0, 0), anchor="nw", image=self.photo)

if __name__ == "__main__":
    app = ExampleApp()
    app.mainloop()

但是此代码仅将第一张图像更改为第二张图像。它不会更改为第二,而是第一。