Pygame 从位图设置鼠标光标

14 投票
4 回答
11334 浏览
提问于 2025-04-15 19:47

我正在用pygame制作一个图像编辑器,想知道是否可以把鼠标光标换成更合适的样子,比如圆形或矩形,这样更适合画刷使用。

不过,pygame处理这个问题的方法有点奇怪,我不太确定这样做是否有效。有没有办法让我写一个位图,然后用这个位图呢?

如果有其他Python的方法也可以,那也行。

4 个回答

3

因为@SapphireSun在评论中提到想知道其他方法,所以我想分享一个不同的答案,那就是手动绘制光标。我猜这也是@Mizipzor在他的回答中提到的,所以这可能只是对他想法的进一步说明。

首先要隐藏鼠标光标,然后每次更新屏幕时,手动“绘制”光标:

pygame.mouse.set_visible(False)  # hide the cursor

# Image for "manual" cursor
MANUAL_CURSOR = pygame.image.load('finger_cursor_16.png').convert_alpha()

# In main loop ~
    ...

    # paint cursor at mouse the current location
    screen.blit( MANUAL_CURSOR, ( pygame.mouse.get_pos() ) ) 

这个方法让PyGame程序可以使用任何类型的光标图像。可能在设置“点击”热点位置时会有点麻烦,但可以通过设置一个透明的光标来解决,确保热点位置和自定义图像的位置一致。具体细节可以查看手册

# transparent 8x8 cursor with the hot-spot at (4,4)
pygame.mouse.set_cursor((8,8),(4,4),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))

我对多色光标的看法不太确定,但至少这是可能的。

6

在PyGame中,你可以使用 pygame.cursors.load_xbm 来加载光标。不过要注意,这个方法只能加载黑白光标,这是PyGame的一个限制,具体可以在 官方文档 中找到相关说明(我引用一下):

PyGame只支持黑白光标。

如果你想了解XBM格式的文档,可以参考 这里。你可以使用PIL库来准备这些文件,具体可以查看 它的文档

17

另一种选择是简单地 隐藏 光标,然后 加载 你喜欢的任何图片,接着在每一帧中 绘制 这张图片, 放在光标的位置

撰写回答