Pygame从位图设置鼠标光标

时间:2010-02-27 04:11:53

标签: python pygame mouse-cursor

我正在使用pygame制作图像编辑器,我想知道是否可以将鼠标光标更改为更适合画笔(例如圆形或矩形)的画笔。 Pygame有一种非常奇怪的方式,我不确定它会非常好用。有没有办法可以写入位图然后使用它?

如果有一种方法可以通常使用Python,我认为这也会有用。

4 个答案:

答案 0 :(得分:14)

另一种选择是简单地hide光标,load您喜欢的任意位图,draw每帧where the cursor is

答案 1 :(得分:5)

您可以使用pygame.cursors.load_xbm在PyGame中加载游标 - 这只是黑白游标,当然,每个its docs(我引用)的PyGame有详细记录的限制:

  

Pygame只支持黑色和白色   系统的游标。

对于XBM格式的文​​档,请参阅例如here。您可以准备此类文件,例如使用PIL库,每its docs

答案 2 :(得分:0)

由于@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程序为光标提供任何类型的位图。将“单击”热点放置在正确的位置可能会有些棘手,但这可以通过设置透明光标,使热点位于与自定义位图匹配的位置来实现。有关详细信息,请参见manual

# 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))

我不确定我对多色光标的感觉,但是至少有可能。

答案 3 :(得分:0)

您也可以只加载图像来代替绘制图像。 例如:

cursor = pygame.image.load('CURSOR IMAGE FILE HERE')
pygame.mouse.set_visible(False)  # hide the cursor
coord = pygame.mouse.get_pos()
#write this in the loop
screen.blit(cursor, coord)

如果只想将其替换为形状,则可以执行以下操作:

pygame.mouse.set_visible(False)  # hide the cursor
coord = pygame.mouse.get_pos()
pygame.draw.(shape here)(screen, (color), (coord, width, height))

希望这对您有帮助!