【问题标题】:How can I delay the time of creating line in canvas in python?如何延迟在 python 中的画布中创建线条的时间?
【发布时间】:2020-11-08 13:40:14
【问题描述】:

我想在一秒钟内在画布中创建一条线,然后在另一秒钟内创建另一条线。 但是我的代码在延迟 1 秒后在一秒内显示所有行。 每一秒我都想根据这些(每秒)坐标在画布中创建一条线。 我正在使用 for 循环在画布内创建第 60 行。


from tkinter import *
import time

root = Tk()
canvas = Canvas(root)
canvas.pack()
everysecond = [(99), (27),
               (107), (29),
               (115), (29),
               (122), (33),
               (129), (35),
               (135), (38),
               (142), (43),
               (147), (48),
               (153), (52),
               (157), (57),
               (161), (64),
               (165), (72),
               (168), (79),
               (169), (85),
               (171), (92),
               (169), (99),
               (171), (108),
               (169), (115),
               (168), (123),
               (165), (130),
               (160), (134),
               (158), (142),
               (153), (147),
               (148), (154),
               (142), (158),
               (136), (160),
               (129), (166),
               (122), (168),
               (114), (170),
               (107), (170),
               (100), (169),
               (92), (169),
               (85), (170),
               (79), (168),
               (72), (166),
               (67), (160),
               (58), (158),
               (52), (153),
               (48), (148),
               (43), (142),
               (38), (134),
               (33), (128),
               (34), (121),
               (30), (114),
               (31), (107),
               (29), (102),
               (30), (91),
               (31), (86),
               (32), (79),
               (35), (70),
               (36), (70),
               (44), (58),
               (47), (53),
               (53), (47),
               (58), (41),
               (63), (37),
               (71), (34),
               (78), (32),
               (85), (30),
               (92), (29)]


def second():
    j = 1
    k = 0
    for i in range(0, 60):
      canvas.create_line((everysecond[k], everysecond[j], 100, 100), width=2, fill='red')
      j = j + 2
      k = k + 2
canvas.after(1000, second)
root.mainloop()

【问题讨论】:

标签: python tkinter canvas time


【解决方案1】:

kj 作为after.like 中的参数传递:

from tkinter import *
import time

root = Tk()
canvas = Canvas(root)
canvas.pack()

line_id = []

everysecond = [(99), (27),
               (107), (29),
               (115), (29),
               (122), (33),
               (129), (35),
               (135), (38),
               (142), (43),
               (147), (48),
               (153), (52),
               (157), (57),
               (161), (64),
               (165), (72),
               (168), (79),
               (169), (85),
               (171), (92),
               (169), (99),
               (171), (108),
               (169), (115),
               (168), (123),
               (165), (130),
               (160), (134),
               (158), (142),
               (153), (147),
               (148), (154),
               (142), (158),
               (136), (160),
               (129), (166),
               (122), (168),
               (114), (170),
               (107), (170),
               (100), (169),
               (92), (169),
               (85), (170),
               (79), (168),
               (72), (166),
               (67), (160),
               (58), (158),
               (52), (153),
               (48), (148),
               (43), (142),
               (38), (134),
               (33), (128),
               (34), (121),
               (30), (114),
               (31), (107),
               (29), (102),
               (30), (91),
               (31), (86),
               (32), (79),
               (35), (70),
               (36), (70),
               (44), (58),
               (47), (53),
               (53), (47),
               (58), (41),
               (63), (37),
               (71), (34),
               (78), (32),
               (85), (30),
               (92), (29)]


def second(k, j):
    line_id.append(canvas.create_line((everysecond[k], everysecond[j], 100, 100), width=2, fill='red'))
    if j == len(everysecond)-1:
        for id in line_id:
            canvas.delete(id)
        canvas.after(100, second, 0, 1)
    else:
        canvas.after(100, second, k + 2, j + 2)

canvas.after(100, second, 0, 1)
root.mainloop()

【讨论】:

  • @Kshitiz 这很简单,检查数字j 并在everysecond[j] 是最后一个元素时删除canvas 上的所有项目。
  • @Kshitiz 将它们保存在一个列表中,并通过for循环将它们全部删除。
  • 我该怎么做?
  • 但我不需要它,我想删除以前的 canvas.line 并根据每秒创建新的 canvas.line 您的创建只是删除所有画布,如果它旋转 360 度但我想要每秒删除一次,并在删除时在同一秒内创建.canvas
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多