在Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客中提到,通过在while True循环中获取队列中事件的方法监控键盘动作。监控鼠标动作的方法与监控键盘动作的方法相同。
相关连接1 队列与事件的相关知识,请参考
Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客
1 鼠标事件的分类
队列中的鼠标事件主要分为3类:移动、按下和松开。这三个事件对应的值分别是MOUSEMOTION、MOUSEBUTTONDOWN和MOUSEBUTTONUP。
2 对于鼠标移动事件的处理
通过对鼠标移动事件的处理,实现实时显示鼠标坐标的功能,如图1所示。
图1 实时显示鼠标坐标
在while True循环中,首先通过pygame.event.get()从队列中获取事件,之后通过if语句对事件类型进行判断,代码如下所示。
if event.type == MOUSEMOTION:
此时,表示鼠标正在屏幕中移动,此时,首先对屏幕进行填充,把之前显示的坐标覆盖掉
screen.fill((0, 0, 255))
之后,构造要显示的坐标。
coordinate = '(%d,%d)'%event.pos
其中,event.pos是一个元组,包含了鼠标当前的横坐标和纵坐标;最后,将构造好的鼠标坐标在屏幕上显示出来。
imgText = font.render(coordinate, True, (255,255,255))
screen.blit(imgText,event.pos)
pygame.display.update()
相关链接2 font的使用方法,请参考
Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客
3 鼠标按下和松开事件
通过监控鼠标按下和松开事件,可以实现在屏幕上划线的功能。即以鼠标按下为起点,松开为终点画一条直线,如图2所示。
图2 屏幕画线
当按下鼠标时,其对应的事件是MOUSEBUTTONDOWN,此时将鼠标坐标保存为直线的起点。
line_start = event.pos
当松开鼠标时,其对应的事件是MOUSEBUTTONUP,此时将鼠标坐标保存为直线的终点,根据起点和终点,通过pygame.draw.line()方法,在屏幕中画线。
line_end = event.pos
pygame.draw.line(screen, (255, 0, 0), line_start, line_end)
pygame.display.update()
其中,pygame.draw.line()方法的第一个参数表示指定的屏幕,第二个参数表示线的颜色;第三个和第四个参数分别表示线的起点和终点。
4 完整代码
以上提到的完整代码如下所示。
import sys
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((500, 200))
screen.fill((0, 0, 255))
pygame.display.update()
font = pygame.font.Font(None, 20)
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
if event.type == MOUSEMOTION:
screen.fill((0, 0, 255))
coordinate = '(%d,%d)'%event.pos
imgText = font.render(coordinate, True, (255,255,255))
screen.blit(imgText,event.pos)
pygame.display.update()
if event.type == MOUSEBUTTONDOWN:
line_start = event.pos
if event.type == MOUSEBUTTONUP:
line_end = event.pos
pygame.draw.line(screen, (255, 0, 0), line_start, line_end)
pygame.display.update()