Pygame Set Mouse Cursor из растрового изображения - PullRequest
12 голосов
/ 27 февраля 2010

Я делаю графический редактор с использованием pygame, и мне было интересно, можно ли поменять курсор мыши на что-то более подходящее (например, круг или прямоугольник) для кистей. У Pygame есть действительно странный способ сделать это, что я не уверен, что будет работать очень хорошо. Есть ли способ, которым я могу написать в растровое изображение и затем использовать это?

Если есть способ сделать это с Python вообще, это тоже сработало бы.

Ответы [ 3 ]

14 голосов
/ 01 марта 2010

Другой вариант - просто скрыть курсор, загрузить любое произвольное растровое изображение, которое вам нравится, и нарисовать это каждый кадр , где находится курсор .

5 голосов
/ 27 февраля 2010

Вы можете загружать курсоры в PyGame с помощью pygame.cursors.load_xbm - это только черно-белые курсоры, конечно, хорошо документированное ограничение PyGame, согласно его документам (и я цитирую):

Pygame поддерживает только черный и белый курсоры для системы.

Для документов формата XBM см., Например, здесь . Вы можете подготовить такие файлы, например, с библиотекой PIL, для его документов .

0 голосов
/ 25 января 2019

Поскольку @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))

Я не уверен, что чувствую к разноцветным курсорам, но, по крайней мере, это возможно.

...