首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示运动球轨迹

如何显示运动球轨迹
EN

Stack Overflow用户
提问于 2022-08-11 22:50:36
回答 1查看 66关注 0票数 2

在tkinter画布中有一个实色球在移动,使用move()和update()方法刷新画布。我想在屏幕上追踪球的轨迹。也就是说,-球移动到它的新位置,但一条线-显示其轨迹的一系列点-仍然在屏幕上。我该怎么做?(两幅油画,其中一幅是透明的?)

EN

回答 1

Stack Overflow用户

发布于 2022-08-19 18:45:28

正如建议的那样,你可以画线,这将从球的最后位置开始,以当前的新球位置结束。

我用tkinter制作了一个简单的应用程序,你可以根据你的需要进行修改。它只使用一个画布,你只需点击画布就可以移动球。鼠标右键单击重置画布和球的位置。

代码语言:javascript
复制
from tkinter import Tk, Canvas, Frame, BOTH


class MovingBall(Frame):
    ball_r = 25
    x, y = 0, 0  # ball last coords

    def __init__(self):
        super().__init__()
        self.ball = None
        self.initUI()

    def initUI(self):
        self.master.title("Moving Ball")
        self.pack(fill=BOTH, expand=1)

        self.canvas = Canvas(self)
            
        self.ball = self.paint_ball(self.x, self.y)
        self.canvas.pack(fill=BOTH, expand=1)
        # Left click on canvas moves the ball
        self.canvas.bind("<Button-1>", self.move)
        # Right click on canvas reset ball position
        self.canvas.bind("<Button-3>", self.reset)

    def paint_ball(self, x, y):
        return self.canvas.create_oval(x - self.ball_r, y - self.ball_r, x + self.ball_r, y + self.ball_r, fill="red",
                                       outline="silver", width=1)

    def paint_path(self, x, y):
        return self.canvas.create_line(self.x, self.y, x, y, fill="silver", width=1)

    def move(self, event):
        # Remove last painted ball
        self.canvas.delete(self.ball)
        # Add new line to the path
        self.paint_path(event.x, event.y)
        # Paint new ball at new position
        self.ball = self.paint_ball(event.x, event.y)
        self.canvas.pack(fill=BOTH, expand=1)
        # Store current ball coords
        self.x, self.y = event.x, event.y

    def reset(self, event):
        """Reset whole scene and put ball to 0,0"""
        self.x, self.y = 0, 0
        self.canvas.delete("all")
        self.ball = self.paint_ball(self.x, self.y)
        self.canvas.pack(fill=BOTH, expand=1)


def main():
    root = Tk()
    MovingBall()
    root.geometry("1024x768")
    root.mainloop()


if __name__ == '__main__':
    main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73327615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档