pygame光标

文章目录

    • 系统内置光标
    • 自定义光标

系统内置光标

pygame.mouse中,通过get_cursor和set_cursor来获取和设置光标状态。

pygame中封装了如下常量,表示不同的光标形态

常量说明
0pygame.SYSTEM_CURSOR_ARROW箭头
1pygame.SYSTEM_CURSOR_IBEAM插入光标
2pygame.SYSTEM_CURSOR_WAIT等待
3pygame.SYSTEM_CURSOR_CROSSHAIR十字
4pygame.SYSTEM_CURSOR_WAITARROW小型等待
5pygame.SYSTEM_CURSOR_SIZENWSE倾斜双箭头⤡
6pygame.SYSTEM_CURSOR_SIZENESW倾斜双箭头⤢
7pygame.SYSTEM_CURSOR_SIZEWE水平双箭头
8pygame.SYSTEM_CURSOR_SIZENS竖直双箭头
9pygame.SYSTEM_CURSOR_SIZEALL十字箭头
10pygame.SYSTEM_CURSOR_NO禁止标志
11pygame.SYSTEM_CURSOR_HAND抓手

下面做一个示例,逐一展示这些光标,其逻辑是,每点击一次,光标的序号加一。

import pygame as pgpg.init()
screen = pg.display.set_mode([400, 200])ind = 0
pg.mouse.set_cursor(cursors[ind])
going = True
while going:pg.time.delay(60)screen.fill((0, 75, 30))pg.display.flip()for event in pg.event.get():if event.type == pg.QUIT or (event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE):pg.quit()going = Falseif event.type == pg.MOUSEBUTTONDOWN:ind = (ind+1) % 12pg.mouse.set_cursor(pg.cursors.Cursor(ind))

效果如下

在这里插入图片描述

自定义光标

在上面的示例中,用到了pygame.cursors中的Cursor类,此即光标对象。在pygame.cursors中,除了这个对象,还封装了compile和load_xbm函数,前者用于把字符串编译为光标形状,后者用于加载xbm文件。

下面通过compile和图形来分别创建光标,示例如下

在这里插入图片描述

import pygame as pgpg.init()
screen = pg.display.set_mode([600, 400])bitmap_1 = pg.cursors.Cursor(*pg.cursors.arrow)
bitmap_2 = pg.cursors.Cursor((24, 24), (0, 0), *pg.cursors.compile(pg.cursors.thickarrow_strings)
)# 通过一个色块来创建光标
surf = pg.Surface((40, 40))
surf.fill((120, 50, 50))
color = pg.cursors.Cursor((20, 20), surf)cursors = [bitmap_1, bitmap_2, color]
ind = 0pg.mouse.set_cursor(cursors[ind])going = True
while going:pg.time.delay(60)screen.fill((0, 75, 30))pg.display.flip()for event in pg.event.get():if event.type == pg.QUIT or (event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE):pg.quit()going = Falseif event.type == pg.MOUSEBUTTONDOWN:ind = (ind+1) % len(cursors)pg.mouse.set_cursor(cursors[ind])

上述代码中一共设置了三种光标,bitmap1通过cursors中的箭头来生成;其二则通过字符串来编译鼠标形式;其三则直接用一个矩形作为光标。其中thickarrow_strings打印结果如下

>>> import pprint
>>> pprint.pprint(pg.cursors.thickarrow_strings)
('XX                      ','XXX                     ','XXXX                    ','XX.XX                   ','XX..XX                  ','XX...XX                 ','XX....XX                ','XX.....XX               ','XX......XX              ','XX.......XX             ','XX........XX            ','XX........XXX           ','XX......XXXXX           ','XX.XXX..XX              ','XXXX XX..XX             ','XX   XX..XX             ','     XX..XX             ','      XX..XX            ','      XX..XX            ','       XXXX             ','       XX               ','                        ','                        ','                        ')