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
解决方案
当您单击画布(不仅是图像)时,此代码会更改图像。
我只添加了self.bind('<Button-1>', self.update)
和event
def update()
我使用 variables IMG1
,IMG2
只是为了轻松地用我的文件替换你的文件。
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()
但是此代码仅将第一张图像更改为第二张图像。它不会改变第二而是第一。
推荐阅读
- android - 标记隐藏标记上的Android setRotation
- java - 如何将jtable只有一列数据插入DB mysql?
- matlab - 在matlab中执行多个嵌套for循环是否有更有效的方法?
- rx-java2 - RxJava/RxKotlin:如果一个源完成(不是全部),combineLatest 已经完成
- python - 密码保险库问题,代码未遵循 if 语句
- r - 底部使用grid.arrange和legend时x轴位置不同的问题
- android - 为什么我必须为数据库中的自动递增列创建一个设置器?
- azure - Azure 流量管理器加权路由,有多少重要?
- sql - 按 max(year) 选择一行并按名称分组,但还包括结果集中的其他值
- linux - 未找到 npm 命令“服务”,但已安装