You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pyglet窗口中通过鼠标拖拽将.png图片从x,y坐标移动到x1,y1坐标

Pyglet 窗口PNG图片拖拽功能实现

核心实现逻辑

要实现拖拽功能,只需要维护3个核心状态变量即可:

  • 当前是否处于拖拽状态
  • 正在被拖拽的图片精灵对象
  • 鼠标点击瞬间与图片锚点的偏移量(避免拖拽时图片左上角直接跳转到鼠标位置,影响交互体验)

完整可运行代码示例

你只需要将代码中test.png替换为你本地的PNG图片路径即可直接运行:

import pyglet
from pyglet.window import mouse

# 创建窗口
window = pyglet.window.Window(width=800, height=600, caption="拖拽图片测试")

# 加载PNG图片并创建精灵,可自行新增多个精灵做多对象拖拽测试
image = pyglet.resource.image("test.png")
sprites = [
    pyglet.sprite.Sprite(image, x=100, y=200),
    pyglet.sprite.Sprite(image, x=400, y=300)
]

# 拖拽状态变量初始化
dragging = False
drag_sprite = None
drag_offset_x = 0
drag_offset_y = 0

@window.event
def on_mouse_press(x, y, button, modifiers):
    global dragging, drag_sprite, drag_offset_x, drag_offset_y
    if button != mouse.LEFT:
        return
    # 倒序遍历精灵,保证上层重叠的图片优先被选中
    for sprite in reversed(sprites):
        if sprite.get_rect().contains(x, y):
            dragging = True
            drag_sprite = sprite
            # 计算鼠标点击位置和图片锚点的偏移量
            drag_offset_x = sprite.x - x
            drag_offset_y = sprite.y - y
            # 将选中的图片移到最上层显示,避免被其他图片遮挡
            sprites.remove(sprite)
            sprites.append(sprite)
            break

@window.event
def on_mouse_drag(x, y, dx, dy, buttons, modifiers):
    global dragging, drag_sprite, drag_offset_x, drag_offset_y
    if not dragging or not drag_sprite:
        return
    # 结合偏移量更新图片位置,避免瞬移
    drag_sprite.x = x + drag_offset_x
    drag_sprite.y = y + drag_offset_y

@window.event
def on_mouse_release(x, y, button, modifiers):
    global dragging, drag_sprite
    if button == mouse.LEFT:
        dragging = False
        drag_sprite = None

@window.event
def on_draw():
    window.clear()
    for sprite in sprites:
        sprite.draw()

if __name__ == "__main__":
    pyglet.app.run()

功能说明

  • 支持左键点击选中图片,拖拽到任意位置松开即可完成放置
  • 点击重叠图片时优先选中最上层图片,选中后自动将该图片移到最上层显示
  • 拖拽过程无瞬移问题,偏移量逻辑保证鼠标点击在图片的哪个位置,拖拽时就一直保持在对应位置

内容的提问来源于stack exchange,提问作者W W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:06:06