python - 是否可以在 tkinter 窗口屏幕上获得鼠标输入?
问题描述
我正在制作一个个人项目,其中我在 tkinter 的 Toplevel() 窗口中打开一个图像(gif)。使用嵌套循环,我打开多个图像,如下所示:
for img in range(10): *#####EX: 10 gif files*
imgfile = "path %i.gif" %img *## Each file is named in series e:g 0, 1, 2,...,9*
for i in range(30): *#####considering each gif has 30 frames/slides*
gif = PhotoImage(file=imgfile, format="gif -index %d" %i)
canvas.create_image(o,o, image=gif, anchor=NW)
canvas.update()
>>>
在 canvas.update() 之后,我想等待用户在外循环的下一次迭代开始之前的任意位置单击 tkinter 窗口屏幕。在 ln 7 中,我必须在“>>>”旁边使用什么命令。
解决方案
您可以将鼠标单击事件绑定到窗口并在鼠标单击事件处理程序中更新图像。下面是一个例子:
import tkinter as tk
file_idx = 0
image_idx = 0
def update_image():
global file_idx, image_idx
imgfile = 'path %i.gif' % file_idx
canvas.gif = tk.PhotoImage(file=imgfile, format='gif -index %d'%image_idx)
canvas.create_image(0, 0, image=canvas.gif, anchor='nw')
image_idx = (image_idx + 1) % 30
if image_idx == 0: file_idx = (file_idx + 1) % 10
root = tk.Tk()
canvas = tk.Canvas(width=800, height=600)
canvas.pack()
root.bind('<Button-1>', lambda e: update_image())
root.mainloop()
推荐阅读
- css - 如何使字母间距css规则在字符周围添加空格?
- python - 使用 asyncio 异步运行两个并发任务组
- node.js - 检测电子中节点环境的方法
- java - File.delete() 仅随机删除目标文件
- php - 如何处理运行需要 5 - 10 分钟的脚本?
- docusignapi - DocuSign API - 在日期范围内列出状态更改为“已完成”的信封
- javascript - 如何使用javascript分隔数字?
- java - msf4j 响应图像得到了不正确的关闭变量
- c# - ASP.NET MVC 5 不更新表行并发送详细信息(带有数据表)
- git - 具有大量图像的机器学习数据集的版本控制?