没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
python
Python pygame(GUI 编程)模块最完整教程(1)
Python-ZZY
原创
关注
17 点赞·5077 人阅读
提示:下滑文章左侧可以查看目录!
1 初识 pygame
关于本教程:
标题标注为红色的是重要内容,黑色的标题读者可自行了解,灰色的标题表示不重要。
1.1 简介
pygame 是 python 中一个流行的 GUI 编程模块,是专门为了开发游戏而设计的。这是一个第
三方模块,是 SDL 语言和 Python 的接口。
pygame 的最新官网是:https://pyga.me/
pygame 以前的官网是:https://www.pygame.org/
1.2 pygame 的优势
pygame 的核心功能使用的是 C 代码,大大提高了运行的速度。
pygame 支持在大部分操作系统运行,可跨平台,在经过编译后可以在 Andriod 手机和网页
上运行。
pygame 十分简单而且易于掌握,自由性强。
pygame 功能全面。其支持的功能包括:图片、文字、绘图、OpenGL 3D、音频、摄像头、
游戏手柄等。
1.3 安装 pygame
pygame 是一个第三方模块,这意味着需要在安装后才能使用。
使用 pip 工具就可以安装,在 cmd 输入后按下回车,稍等一会儿:
pip install pygame-ce
复制
注意:此处的 pygame-ce 是 pygame 官方的社区编辑版,推荐使用。普通版的 pygame 可用 pip
install pygame 安装
安装完成后,尝试导入 pygame,会打印出一段文字,提示 pygame 的版本:
在本教程中,使用的是较新版的 pygame2。
1.4 pygame 子模块
pygame 的许多功能都定义在不同的子模块里面。下面列举了常用的子模块。读者可以了解
一下。
模块名 描述
camera 操作系统摄像头
cursors 加载、编译光标图像
display 配置 pygame 的显示表面
draw 在表面上绘制形状
event 管理用户事件(如键盘、鼠标)
font 加载和绘制 TrueType 字体
gfxdraw 绘制抗锯齿的形状
image 加载、保存图片文件
joystick 管理游戏手柄
key 管理键盘输入
locals 此模块储存所有的 pygame 常量
mixer 播放声音
mouse 管理光标位置和事件
scrap 管理剪贴板
sndarray 处理声音样本数据
sprite 管理精灵
surfarray 处理图像像素数据
time 管理时间和帧率
transform 变换表面(如缩放、旋转等)
注:::pygame 还增加了许多功能,作者后期会进行补充
pygame 中一些常用的模块会自动导入,所以大部分模块无需额外导入。
1.5 表面
pygame 可以绘制一些图片、文本。为了在窗口上显示它们,pygame 提供了一系列的方法来
导入、渲染。但在这之前,所有的绘制内容都会转化成一个 pygame.Surface 对象(表面对象,
可以理解成一张图片),这样才能进行绘制。表面由多个像素构成,是一个矩形。pygame 也
提供了一些方法处理表面。
整个 pygame 窗口除去标题栏的部分可以按照一个表面来操作。在操作表面的时候,比如要
在某个地方绘制一段文字,必然会涉及到坐标的处理。在 pygame 中,最简单的一种坐标表
示方式是使用一个形如(x, y)的可迭代对象,如(0, 0), (100, 50)等等。
pygame 的坐标系中,原点(0, 0)在左上角,x 轴正方向向右,y 轴正方向向下。
2 第一个 pygame 示例
import pygame as pg #导入 pygame 模块,通常为了简便而命名为 pg
pg.init() #初始化
screen = pg.display.set_mode((400, 400)) #建立一个 400x400 的窗口
pg.display.set_caption("Pygame 窗口")
while True:
for event in pg.event.get(): #获取用户事件
if event.type == pg.QUIT: #如果事件为关闭窗口
pg.quit() #退出 pygame
复制
接下来我将对这一段代码进行解释。
2.1 初始化 pygame
pygame 使用前,首先要进行初始化操作,也就是调用 pygame.init()方法。如果不进行初始
化操作,大部分功能将无法使用,会显示一段错误提示:
pygame.error: video system not initialized
复制
除了使用 pygame 主模块,使用 pygame 的子模块有时候也需要初始化。pygame 中有一些重
要的子模块被提前导入到 pygame 主模块中,这样的模块的初始化操作会在调用 pygame.init()
的时候同时进行。
2.2 创建窗口
pygame.display.set_mode 用于配置 pygame 窗口。pygame 是单窗口的模式,这意味着在一
个 python 解释器中默认只允许创建一个窗口。pg.display.set_mode 创建一个窗口的 Surface
对象,原形如下:
set_mode(size=(0, 0), flags=0, depth=0, display=0, vsync=0) -> Surface
复制
size 参数指定了窗口尺寸,如(200, 300)是一个宽为 200,高为 300 的窗口。关于这个函数的
更多用法参见后文。
前面已经介绍过,set_mode 返回窗口的 Surface(表面)对象,可以和普通表面一样操作它。
如果在后面想要更改窗口的样式,也可以调用 set_mode 方法,不过那时就不会额外创建一
个窗口了,而是直接在原先创建的窗口上更改。
2.3 更改标题
pg.display.set_caption 方法用于设置窗口的标题。
set_caption(title) -> None
复制
2.4 事件循环
接下来,代码进入了一个 while True 的无限循环,这个循环通常被称作事件循环。 在这个循
环中不断调用 pg.event.get()来刷新窗口,处理用户事件,如键盘按下、窗口拖拽、鼠标点击
等。pg.event.get()将返回一个事件列表,通常遍历这个列表,与一些事件进行比对,来判断
用户在窗口上进行了什么操作。列表中每一项都是一个 pg.event.Event 对象,存储了事件的
信息。Event 对象的 type 属性是这个事件类型的标识符(一个整数),如果和 pg.QUIT 事件
类型的标识符匹配,那么就说明用户按下了关闭窗口的按钮。
2.5 退出 pygame
和初始化 pygame 的 init()方法相对,pygame.quit()方法用于退出 pygame 窗口。
3 基础表面操作
通过上面一个示例的学习,我们已经成功创建出一个纯黑色的窗口,但是这还远远不够,我
们还要在窗口上绘制图片、图形、文字。在 1.5 节中,我们已经了解过 pygame.Surface,知
道 pygame 的图片、窗口表面都是 Surface 对象,接下来将进一步讲解操作的方式。
3.1 fill()方法
Surface.fill 方法用于将一个表面用纯色填充。在 pygame 中,颜色的表示方式通常有两种:
(R, G, B)色彩元组或颜色名称(例如"red", "yellow")的字符串(也可以通过 pg.color.Color 对
象,这里暂时不展开)。
import pygame as pg #导入 pygame 模块,习惯上命名为 pg
pg.init() #初始化
screen = pg.display.set_mode((400, 400)) #建立一个 400x400 的窗口
pg.display.set_caption("Pygame 窗口")
while True:
screen.fill((255, 255, 255)) #将窗口用白色填充
for event in pg.event.get(): #获取用户事件
if event.type == pg.QUIT: #如果事件为关闭窗口
pg.quit() #退出 pygame
pg.display.flip() #刷新窗口(很重要!!)
复制
这个示例的大部分代码和我们的第一个示例一样,但是在 while True 循环中添加了一些代码,
运行效果如下:
可以看到窗口变成了(255, 255, 255)的颜色(纯白)。
需要注意的是最后一行代码 pg.display.flip(),这行代码用于更新窗口表面(窗口表面通常叫
做屏幕)。在屏幕上进行的一系列操作如果不进行刷新,则无法正确在屏幕上显示。这是窗
口表面的一个特殊之处。新手一定要注意:不要忘记刷新!除了 flip 方法,其实还有一个
update()方法也可以用于刷新,但是 flip 速度会快一点。
那么,为什么 fill 要写在循环里面呢?其实写在循环外面,然后调用一次刷新也是可以的。
剩余36页未读,继续阅读
资源评论
weixin_44555848
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功