python - 如何阻止 tkinter 画布小部件 / after 方法跳过列表中的元素?
问题描述
我正在尝试创建一条每秒更新的行。此更新需要显示在屏幕上,因此您应该能够在窗口中看到更改。例如,下面的每一行都应该在一秒钟后运行。
canvas.create_line(1, 2, 10, 20, smooth="true")
canvas.create_line(1, 2, 10, 20, 50, 60, smooth="true")
canvas.create_line(1, 2, 10, 20, 50, 60, 100, 110, smooth="true")
这是我到目前为止所拥有的:
def make_line(index):
while index < len(database):
x, y, z = database[index]
# database is a list of tuples with numbers for coordinates
coordinates.append(x) # coordinates is an empty list
coordinates.append(y)
#don't need z since 2D map
index += 1
if index == 2:
# noinspection PyGlobalUndefined
global line
line = canvas.create_line(coordinates, smooth="true")
# same as canvas.create_line(1, 2, 10, 20, smooth="true")
elif index > 2:
canvas.after(1000, lambda: canvas.coords(line, coordinates))
# it's jumping from the 1st to the 4th element
else:
pass
make_line(0)
我认为问题出在 canvas.after 方法和 canvas.coords 到它在 index = 3 时运行该行时,坐标已经有 1、2、10、20、50、60、100 和 110,而它应该只有 1、2、10、20、50 和 60。提前致谢。
解决方案
我最终不得不将 while 循环移到函数之外并添加 root.update_idletasks() 和 root.update() 而不是 root.mainloop()。从这篇文章中,我了解到您的程序基本上会在 mainloop 停止,而更新将允许程序继续。这就是我最终的结果:
def add_coordinates(index):
x, y, z = database[index]
coordinates.append(x) # coordinates is an empty list
coordinates.append(y)
ind = 0 # ind means index
while ind < len(database):
if ind < 2:
add_coordinates(ind)
elif ind == 2:
trajectory = canvas.create_line(coordinates, smooth="true")
add_coordinates(ind)
canvas.after(1000)
elif ind > 2:
add_coordinates(ind)
canvas.after(1000, canvas.coords(trajectory, coordinates))
else:
pass
ind += 1
root.update_idletasks()
root.update()
当然,我在文件的开头有 import 语句,在文件的最后有 root.mainloop()。
推荐阅读
- bash - Go中带参数的exec命令?
- php - 在 php 代码中运行嵌入 360 度照片的框架
- vb.net - vb.net改变对应checkbox.checked = true的picturebox的背景颜色
- javascript - v-for json 中的切片对象 - Vue 警告:TypeError:无法读取未定义的属性“切片”
- python - 如何将以下代码转换为 python 代码,用于校验和。请有人可以给我一些方向来学习一些东西来实现这一目标
- c# - 如何在方法中添加运算符增量(++)、减量(--)和或(||):AddTokenRule
- angular - 如何仅在 Angular 5 应用程序中启用提交时所需的文本字段?
- powerbi - Python Visual 脚本中的 Power BI 转储/打印变量
- sql-server - 如果员工的薪水高达 5000 则排名 =1,高达 100k 则排名 = 2,依此类推。我们可以使用 rank 函数得到结果吗?
- python - 如何将 Pandas 系列中的连续 NaN 值分组到一组切片中?