【问题标题】:Tkinter delete all moving objects at defined coordsTkinter 在定义的坐标处删除所有移动对象
【发布时间】: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


【解决方案1】:

如果要删除y坐标> 200的线,可以修改move_flow()如下:

def move_flow(self):
    for flow in self.flows:
        coords = self.canvas.coords(flow)
        if coords[1] > 200:  # top y > 200
            self.canvas.delete(flow) # delete the canvas line item
            self.flows.remove(flow) # delete the item in self.flows as well
        else:
            self.canvas.move(flow, self.Xspeed-randint(10, 30), self.Yspeed+randint(10, 20))

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2016-09-19
  • 2019-02-27
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
相关资源
最近更新 更多