【发布时间】:2021-07-13 04:33:38
【问题描述】:
我有一些形状和一堆(数千条)移动线。每次都会创建线条并向下移动。如果它们的最高坐标为 200,我想删除它们。但是当我尝试这样做时,所有画布都会停止移动(其他形状和所有线条都停止并且所有线条都被删除)。我在这里需要帮助。我想要的是:线条会在某些 X 坐标处被删除,同时线条的创建和移动将继续动态进行,不会有任何进程停止或关闭。
class Flow:
def __init__(self, tph, color, canvas):
self.flows = []
self.tph = tph
self.color = color
self.Xspeed = 10
self.Yspeed = 0
self.canvas = canvas
def create_flow(self):
for i in range(self.tph):
self.flow = self.canvas.create_line(550, 50, 500, 52, fill=self.color, width=2)
self.flows.append(self.flow)
return self.flows
def move_flow(self):
for self.flow in self.flows:
self.canvas.move(self.flow, self.Xspeed - randint(10, 30), self.Yspeed + randint(10, 20))
flow = Flow(10, "#976C3D", canvas)
def animate():
flow.create_flow()
flow.move_flow()
canvas.after(100, animate)
animate()
tk.mainloop()
【问题讨论】:
-
删除是什么意思?隐藏?
-
从画布中移除
-
您可以在您的
move_flow函数中添加if self.canvas.bbox(self.flow)[1] > 200。然后删除精灵只需使用self.canvas.delete(self.flow)。您还必须将其从列表中删除 -
它正在停止程序。所有对象都停止移动
-
"如果它们的最高坐标为 200 则删除它们" 这是在谈论 y 坐标,但是 "这些行将在某些 X 坐标处被删除" 正在谈论 x 坐标。那么你到底想要哪一个呢?如果是说y坐标,你的意思是当它的y坐标> 200时要删除该行吗?如果是x坐标,你的意思是如果x坐标
标签: python user-interface tkinter tkinter-canvas