Pygame устанавливает курсор мыши из растрового изображения

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

Если есть способ сделать это с помощью Python в целом, я полагаю, что это тоже сработает.


person SapphireSun    schedule 27.02.2010    source источник


Ответы (4)


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

person Mizipzor    schedule 01.03.2010

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

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

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

person Alex Martelli    schedule 27.02.2010
comment
Это единственный доступный метод? Не похоже, что это обеспечит достаточную обратную связь с пользователями. Я мог бы использовать парение цвета, но курсор кажется более элегантным решением. - person SapphireSun; 27.02.2010

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

Не знаю, как я отношусь к разноцветным курсорам, но, по крайней мере, это возможно.

person Kingsley    schedule 25.01.2019

Вы также можете просто загрузить изображение, чтобы заменить дро-то вместо него. Например:

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

Надеюсь, это помогло!

person Death    schedule 09.11.2019