class MovingPointsApp :
def __init__(self, root) :
self.root = root
self.root.title("动点在数轴上移动")
# 设置画布大小,确保可以显示正负20个刻度
self.canvas_width = 2100 # 设置画布宽度为2100
self.canvas_height = 400 # 减小画布高度
self.canvas = tk.Canvas(root, width=self.canvas_width, height=self.canvas_height)
self.canvas.pack()
# 设置数轴起始和结束位置
self.left_offset = 100 # 减小左侧留空以适应更多刻度
self.right_offset = 100 # 减小右侧留空以适应更多刻度
self.axis_start = self.left_offset
self.axis_end = self.canvas_width - self.right_offset
# 计算刻度间距和零点位置
self.tick_spacing = 45 # 调整刻度间距以适应更多刻度
self.zero_x = (self.axis_start + self.axis_end) // 2 # 零点位置在中间
# 绘制数轴
self.canvas.create_line(self.axis_start, self.canvas_height // 2, self.axis_end, self.canvas_height // 2,
arrow=tk.LAST, width=3) # 增加数轴线宽
# 绘制数轴上的刻度
self.draw_ticks()
# 初始化动点的坐标
self.point1_x = self.zero_x + (3 * self.tick_spacing) # 初始点A在位置3
self.point2_x = self.zero_x + (5 * self.tick_spacing) # 初始点B在位置5
# 绘制两个动点
self.point1 = self.canvas.create_oval(self.point1_x - 5, self.canvas_height // 2 - 5, self.point1_x + 5,
self.canvas_height // 2 + 5, fill="red")
self.point2 = self.canvas.create_oval(self.point2_x - 5, self.canvas_height // 2 - 5, self.point2_x + 5,
self.canvas_height // 2 + 5, fill="blue")
# 动点的初始速度和方向
self.speed1 = 2
self.speed2 = 3
self.direction1 = 1 # 1 为向右移动,-1 为向左移动
self.direction2 = 1 # 1 为向右移动,-1 为向左移动
self.running = False # 动画是否正在运行
# 创建输入框和按钮
self.create_controls()
def draw_ticks(self) :
"""绘制数轴上的刻度,负数和正数各20个刻度"""
for i in range(-20, 21) : # 修改范围为-20到20
# 计算刻度的x坐标:从零点开始,向左为负,向右为正
x = self.zero_x + (i * self.tick_spacing)
if x >= self.axis_start and x 懂 我就用python写了一个界面化图形 从而实现一条数轴 两个点 来回移动 用这东西给他讲题他可算开窍了!!!!!!!!!