首页 > 解决方案 > 如何通过鼠标单击更改 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

标签: pythontkinter

解决方案


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

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

我使用 variables 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()

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


推荐阅读