1 说明:
1.1 安装
pip install pyglet
1.2 相关地址
https://pypi.org/project/pyglet/
http://pyglet.org/
https://github.com/pyglet/pyglet
1.3 介绍
1.3.1 是python的游戏三大库之一,适合游戏动画,1D,2D,3D设计。
1.3.2 一个python下的多媒体框架,属于轻量级别,可以轻易的做出交互丰富的应用。比pygame,panda3d更容易学习和掌握。
2 2d动画散步的精灵。
2.1 代码:dinosaur.py
#网上gif下载地址
# The dinosaur.gif file packaged alongside this script is in the public
# domain, it was obtained from http://www.gifanimations.com/.
#导入模块
import sys
import pyglet
##定义系统加载图片地址
if len(sys.argv) > 1:
# Load the animation from file path.
animation = pyglet.image.load_animation(sys.argv[1])
texture_bin = pyglet.image.atlas.TextureBin()
animation.add_to_texture_bin(texture_bin)
else:
# 文件与py文件在同一个目录,这是pyglet的特色之处
animation = pyglet.resource.animation('dinosaur.gif')
#定义精灵=sprite和导出精灵模块
sprite = pyglet.sprite.Sprite(animation)
#定义窗口和大小
window = pyglet.window.Window(
#窗口标题名
caption='散步的精灵动画',
#窗口大小可调节
resizable=True,width=8*sprite.width, height=8*sprite.height)
# Set window background color to white.
# 设置窗口背景颜色为白色
pyglet.gl.glClearColor(1, 1, 1, 1) #默认背景颜色是黑色,注释掉就是黑色
#window的装饰器法
@window.event
def on_draw():
window.clear()
sprite.draw()
#启动
pyglet.app.run()
2.2 dinosaur.gif,注意与上面的py文件放在同一个目录下
2.3 效果图
3 Label设置
代码:多种方法显示label,代码注释中有讲解。
#方法一
'''
import pyglet
window = pyglet.window.Window()
label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=window.width//2, y=window.height//2,
anchor_x='center', anchor_y='center')
#在一个相同名字的函数上使用@Window.event装饰器
@window.event
def on_draw():
window.clear()
label.draw()
pyglet.app.run()
'''
'''
#方法二
import pyglet as pt
#window = pt.window.Window() #默认窗口大小
win = pt.window.Window(1000,1000) #指定窗口大小
label = pt.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=win.width//2, y=win.height//2,
anchor_x='center', anchor_y='center')
#在一个相同名字的函数上使用@Win.event装饰器
#这个装饰器的win就是上面定义win
@win.event
def on_draw():
win.clear()
label.draw()
pt.app.run()
'''
'''
#方法三
import pyglet as pt
win = pt.window.Window(
#窗口大小设置
width=1000,
height=1000,
#窗口标题名
caption="第一个窗口",
#窗口大小可调节
resizable=True
)
label = pt.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=win.width//2, y=win.height//2,
anchor_x='center', anchor_y='center')
if __name__ == '__main__':
pt.app.run()
label.draw()
'''
#方法四
import pyglet
game_window = pyglet.window.Window(
width=1000,
height=1000,
caption="第一个窗口",
resizable=True
)
# 创建Label对象
label = pyglet.text.Label('Hello, world',
font_size=25, # 字体不指定,使用默认的,大小为25
x=game_window.width//2,
y=game_window.height//2,
anchor_x='center', anchor_y='center'
)
def show_label():
# 将初始的窗口内容删除
game_window.clear()
# 添加文本,重新绘制窗口
label.draw()
# 重写on_draw方法,以后就会执行我们在show_label里面指定的代码
# set attribute的意思
setattr(game_window, "on_draw", show_label)
if __name__ == '__main__':
pyglet.app.run()
4 照片显示
代码
#导出模块
import pyglet
#窗口定义
#window = pyglet.window.Window() #采用默认方法
window = pyglet.window.Window(
#窗口大小设置
width=1000,
height=1000,
#窗口标题名
caption="照片显示",
#窗口大小可调节,默认是False,不可调节
resizable=True
)
#定义照片
#注意特别之处,文件py与jpg在同一个目录下
#一般这种都在根目录下,或者指定路径和目录
image = pyglet.resource.image('1221.jpg')
#装饰器法显示
@window.event
def on_draw():
window.clear()
image.blit(0, 0)
pyglet.app.run()
1221.jpeg
plglet照片显示
5 计时器,代码
#定义计时器
import pyglet
#定义窗口全屏
#window = pyglet.window.Window(fullscreen=True) #哈哈哈,deepinlinux的录屏不支持这种全屏
window = pyglet.window.Window( #窗口大小设置
width=1000,
height=1000,
#窗口标题名
caption="计时器",
#窗口大小可调节
resizable=True)
#定义计时器
class Timer:
#初始化定义
def __init__(self):
self.label = pyglet.text.Label('00:00', font_size=100,
x=window.width//2, y=window.height//2,
anchor_x='center', anchor_y='center')
self.reset()
#定义重设函数
def reset(self):
self.time = 0
self.running = False
self.label.text = '00:00'
self.label.color = (255, 255, 255, 255)
#定义更新韩式
def update(self, dt):
if self.running:
self.time += dt
#python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
m, s = divmod(self.time, 60)
self.label.text = '%02d:%02d' % (m, s)
if m >= 5:
self.label.color = (180, 0, 0, 255)
@window.event
#定义窗口按钮函数
def on_key_press(symbol, modifiers):
#空格键按钮定义,点击开始,再点击暂停
if symbol == pyglet.window.key.SPACE:
if timer.running:
timer.running = False
else:
if timer.time > 0:
timer.reset()
else:
timer.running = True
elif symbol == pyglet.window.key.ESCAPE:
window.close()
@window.event
def on_draw():
window.clear()
timer.label.draw()
timer = Timer()
pyglet.clock.schedule_interval(timer.update, 1/30.0)
pyglet.app.run()
效果图
==========未完待续========
下次讲讲pyglet的坑的问题,哈哈哈哈。先分享出来,喜欢就转发和收藏