对于使用过计算机的人,应该对图形用户界面(GUI)应该都不会太陌生,这里就不在赘述。那么对于python这样的动态语言有没有GUI相关的库呢?答案是肯定有的,那么常见的有哪些呢?主要有tkinter、wxPython、PyQt、PyGTK等模块,而tkinter是python默认的模块,没有功能特别强大的GUI控件,所以真的要在python中进行GUI开发,推荐使用wxPython、PyQt、PyGTK等模块。Pyhton还提供了Pygame游戏开发模块。下面主要介绍tkinter、wxPython、Pygame的使用,废话不多说直接开始吧,哈哈哈哈哈~

基于tkinter模块的GUI

tkinter是基于Tk工具包的一个模块,而Tk为控件的摆放提供了三种布局管理器,通过布局管理器可以对控件进行定位,这三种布局管理器分别是:

Placer:开发者提供控件的大小和摆放位置

Packer:自动将控件填充到合适的位置

Grid:基于网格坐标来摆放控件

讲了这些还是不知道tkinter怎么使用,那么我们直接介绍使用tkinter来开发GUI的基本步骤:

导入tkinter模块中我们需要的东西
创建一个顶层窗口对象并用它来承载整个GUI应用
在顶层窗口对象上添加GUI组件
通过代码将这些GUI组件的功能组织起来
进入主事件循环(main loop)

基于wxPython模块的GUI

wxPython是一个Python包装wxWidgets(c++编写)的一个流行的跨平台的GUI工具包,可以作为Python的一个扩展模块。wxObject类是wxPython API的核心模块,它是所有类的基础类,包括所有GUI应用程序使用的部件。如wx.Button,wx.StaicText等。

Pygame游戏开发

Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame的使用基本步骤:

导入Pygame模块

先初始化

构建一个窗口

设置标题

让其保持运行状态,直到用户手动关闭

先检测事件,如果检测到关闭按钮那么就退出

下面从五方面来介绍Pygame的使用:

1.在游戏窗口中绘图

我们可以通过Pygame中的draw模块在游戏窗口中绘制各种图形,主要包括:线条、矩形、多边形、圆、椭圆、圆弧等。但最重要想说的不是这个,而是“屏幕坐标系”。什么是屏幕坐标系,它就是指将屏幕左上角设置为坐标原点‘(0, 0)’,向右是x轴的正向,向下是y轴的正向,在表示位置或者设置尺寸的时候,我们默认的单位都是像素(像素概念)。说了那么多我们举个例子更实际一些:

import pygame  # 导入pygame模块
def main():# 初始化pygame模块pygame.init()# 初始化显示窗口并设置窗口尺寸screen = pygame.display.set_mode((888, 666))# 设置当前窗口的标题pygame.display.set_caption('888666')# 设置窗口背景色screen.fill((200, 102, 22))# 绘制一个圆(参数分别是: 屏幕, 颜色, 圆心位置, 半径, 0表示填充圆)pygame.draw.circle(screen, (255, 0, 0,), (100, 100), 30, 0)# 刷新当前窗口(渲染窗口将绘制的图像呈现出来)pygame.display.flip()running = True# 开启一个事件循环处理发生的事件while running:# 从消息队列中获取事件并对事件进行处理for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif __name__ == '__main__':main()

2.图形的处理

如果需要直接加载图像到窗口上,可以使用pygame中image模块的函数来加载图像,再通过之前获得的窗口对象的`blit`方法渲染图像,代码如下:

import pygame
WIN_WIDTH = 800
WIN_HEIGHT = 800
#初始化
pygame.init()
#构建游戏窗口
chuangkou = pygame.display.set_mode((WIN_WIDTH,WIN_HEIGHT))
#设置游戏标题
pygame.display.set_caption('图片')
# 填充背景
chuangkou.fill((255,255,255))
pygame.display.flip()
image = pygame.image.load('./res/ball.png')
# 在窗口上渲染图像
chuangkou.blit(image, (50, 50))
pygame.display.update()   #再次刷新# 开启一个事件循环处理发生的事件
while True:for x in pygame.event.get():if x .type==pygame.QUIT:exit()

3.动画效果

动画效果其实就是把不连续的图片连续的播放,只要每秒钟达到了一定的帧数,那么就可以做出比较流畅的动画效果,代码如下:

import pygame
WIN_WIDTH = 800
WIN_HEIGHT = 800
#初始化
pygame.init()
#构建游戏窗口
chuangkou = pygame.display.set_mode((WIN_WIDTH,WIN_HEIGHT))
#设置游戏标题
pygame.display.set_caption('图片')
# 填充背景
chuangkou.fill((255,255,255))
pygame.display.flip()
image = pygame.image.load('./res/ball.png')
# 在窗口上渲染图像
chuangkou.blit(image, (50, 50))
pygame.display.update()   #再次刷新num =1
d = 0 #初始化旋转的角度
# 开启一个事件循环处理发生的事件
while True:num += 1if num % 20 == 0:d+=2newimage = pygame.transform.rotozoom(image, d, 0.2)chuangkou.blit(newimage, (0, 0))pygame.display.update()for x in pygame.event.get():if x .type==pygame.QUIT:exit()

4.碰撞检测

在游戏中会有很多对象出现,而这些对象之间的“碰撞”在所难免,比如炮弹击中了飞机、箱子撞到了地面等。碰撞检测在绝大多数的游戏中都是一个必须得处理的至关重要的问题,pygame的sprite(动画精灵)模块就提供了对碰撞检测的支持。通常情况下,我们使用该模块的基类 Sprite 来创建一个子类,从而达到处理精灵的目的。当我们需要管理大量的精灵时,操作它们将变得复杂,此时通过构建精灵容器(group 类)也就是精灵组来统一管理这些精灵。构建方法如下:

group = pygame.sprite.Group() # 创建精灵组

group.add(sprite_one) # 向组内添加一个精灵

此同时pygame.sprite模块也提供了多种检测精灵是否碰撞的方法,如下所示:

方法 说明
pygame.sprite.collide_rect() 两个精灵之间的矩形检测,即矩形区域是否有交汇,返回一个布尔值
pygame.sprite.collide_circle()  两个精灵之间的圆形检测,即圆形区域是否有交汇,返回一个布尔值
pygame.sprite.collide_mask() 两个精灵之间的像素蒙版检测,更为精准的一种检测方式
pygame.sprite.spritecollide() 精灵和精灵组之间的矩形碰撞检测,一个组内的所有精灵会逐一地对另外一个单个精灵进行碰撞检测,返回值是一个列表,包含了发生碰撞的所有精灵
pygame.sprite.spritecollideany() 精灵和精灵组之间的矩形碰撞检测,上述函数的变体,当发生碰撞时,返回组内的一个精灵,无碰撞发生时,返回 None
pygame.sprite.groupcollide() 检测在两个组之间发生碰撞的所有精灵,它返回值是一个字典,将第一组中发生碰撞的精灵作为键,第二个组中发生碰撞的精灵作为值

说了那么多关于pygame.sprite碰撞检测的函数,下面我们举个例子来得更直观一点:

import sys, pygame
from random import *
class MyClass(pygame.sprite.Sprite):def __init__(self, image_file, location, speed):pygame.sprite.Sprite.__init__(self)        #初始化动画精灵self.image = pygame.image.load(image_file) #加载图片self.rect = self.image.get_rect()          #得到定义图像边界矩形self.rect.left, self.rect.top = location   #设置球的初始位置self.speed = speed                         #创建一个速度def move(self):self.rect = self.rect.move(self.speed)if self.rect.left < 0 or self.rect.right > width:self.speed[0] = -self.speed[0]if self.rect.top < 0 or self.rect.bottom > height:self.speed[1] = -self.speed[1]
def animate(group):screen.fill([255, 255, 255])for ball in group:ball.move()for ball in group:group.remove(ball)      #从组删除精灵#检查精灵与组的碰撞if pygame.sprite.spritecollide(ball, group, False): ball.speed[0] = -ball.speed[0]ball.speed[1] = -ball.speed[1]group.add(ball)screen.blit(ball.image, ball.rect)pygame.display.flip()pygame.time.delay(20)
#设置窗口大小和颜色
size = width, height = 640, 480
screen = pygame.display.set_mode(size)
screen.fill([255, 255, 255])
img_file = "beach_ball.png"
clock = pygame.time.Clock()
group = pygame.sprite.Group()   #创建精灵组
#将球增加到列表
for row in range(0, 2):for column in range(0, 2):location = [column * 180 + 10, row * 180 + 10]speed = [choice([-4, 4]), choice([-4, 4])]     #让每个球变得随机性ball = MyClass(img_file, location, speed)group.add(ball)
running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseframe_rate = clock.get_fps()print( "frame rate = ", frame_rate)   animate(group)   clock.tick(30)
pygame.quit()

5.事件处理

其实通过上面的代码例子中,细心的人应该注意到有一个pygame.event.get()方法,它就是获取鼠标事件,而且通过事件对象的`type`属性可以判定事件类型,再通过`pos`属性就可以获得鼠标点击的位置。

总结

这里只是简单的介绍pygame的使用,要想了解更多pygame知识,推荐pygame的官方网站,但要求要有一定的英文基础哈哈哈哈哈~。其实我们学习这些模块,不但要了解怎么使用他们,更重要的是要掌握面向对象程序设计和事件驱动的思想去解决现实中的问题。

Python图形用户界面和游戏开发相关推荐

  1. Python开发系列课程(12) - 图形用户界面和游戏开发

    图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述.Python默认的GUI开发模块是tkint ...

  2. Day10:图形用户界面和游戏开发

    文章目录 图形用户界面和游戏开发 基于tkinter模块的GUI 使用Pygame进行游戏开发 制作游戏窗口 在窗口中绘图 加载图像 实现动画效果 碰撞检测 事件处理 图形用户界面和游戏开发 基于tk ...

  3. python图形用户界面设计报告_19.1 Python图形用户界面开发工具包

    ,赠送一本"Python相关图书".咨询方式:加[51CTO-关老师付费群]523714201 验证消息:咨询赠书 本视频采用**Python 3.X版 本书是智捷课堂开发的立体化 ...

  4. Python图形用户界面设计-Delphi For Python高级开发教程

    目录 简介........................................................................ 5 谁应该阅读这本教程........... ...

  5. php做gui,php7 图形用户界面GUI如何开发

    php7 图形用户界面GUI如何开发?这篇文章主要介绍了php7 图形用户界面GUI 开发,结合实例形式分析了PHP7基于php_ui扩展实现的图形用户界面GUI相关操作技巧,感兴趣的用户就来一聚教程 ...

  6. Python图形用户界面

    目录 1.图形用户界面概述 1.1tkinter 2.tkinter概述 2.1tkinter模块 2.2图形用户界面的构成 2.3框架和GUI应用程序类 2.4tkinter主窗口 3几何布局管理器 ...

  7. 基于python的植物大战僵尸游戏开发

    1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目,基于python的植物大战僵尸游戏开发. 计算机毕业生设计,课程设计需要帮助的可以找我 2 设计概要 21世纪是信息化时代,随着信息技术和网 ...

  8. HTML5 Canvas核心技术:图形.动画与游戏开发

    <HTML5 Canvas核心技术:图形.动画与游戏开发> 基本信息 原书名:Core HTML5 Canvas: Graphics, Animation, and Game Develo ...

  9. Python图形用户界面Tkinter标准色彩颜色背景色大全

    Python图形用户界面Tkinter标准色彩颜色背景色大全 前段时间刚开始学Tkinter,后来想做一个漂亮的GUI界面,但是自己对颜色的词汇储备有限,所以没能顺利完成,今天在网上查了很多信息,做了 ...

  10. GEE系列:第10单元 使用 Google 地球引擎创建图形用户界面【GUI开发】

    GEE从入门到实战的10个系列单元: GEE系列:第1单元 Google地球引擎简介 GEE系列:第2单元 探索数据集 GEE系列:​第3单元 栅格遥感影像波段特征及渲染可视化 GEE系列:第4单元 ...

最新文章

  1. python -- 青少年如何使用 Python 开始游戏开发
  2. [YTU]_2760( 字符串---首字母变大写)
  3. UA MATH571A 检验异方差的非参数回归方法
  4. 前端随笔整理[5.14]
  5. jena 开发之 mysql数据导入_在Jena框架下基于MySQL数据库实现本体的存取操作
  6. 2个实用的JS小技巧
  7. Spring MVC (mvc框架)
  8. PJ可能会用到的动态规划选讲-学习笔记
  9. Spring注解几大注解的区别
  10. Slider控件的使用方法
  11. 匿名对象与非匿名对象的区别
  12. Google 周三宣布新版Google Trend上线
  13. SVN源码泄露漏洞总结
  14. 【REACT-受控组件和非受控组件】
  15. 手机号码清洗的优势是什么
  16. python程序设计思维导图_程序设计 思维导图
  17. 最全Markdown教程
  18. 中兴通讯联合SWAN Mobile打通斯洛伐克首个5G视频电话
  19. 增长黑客AB-Test系统(三)——AB-Test Hash分流
  20. java手动/按模板生成word与excel

热门文章

  1. 编写程序,在屏幕输出“Hello,World!“的字符串
  2. 15年学不会英语的原因
  3. 03-ES6语法:模板字面量(Template Literals)
  4. 【渝粤题库】陕西师范大学210033 劳动法与社会保障法作业
  5. 运行app时找不到so的原因
  6. 【渝粤教育】电大中专计算机网络基础 (2)作业 题库
  7. vue form表单数据提交
  8. oa处理会签流程图_深入剖析OA办公系统的流程管理方案
  9. 解决Rstudio打开空白
  10. GLFWError #65542 Happen, WGL: The driver does not appear to support OpenGL 问题解决