# Python学习笔记 Day10

图形用户界面和游戏开发

Python学习笔记 Day10

图形用户界面和游戏开发

基于tkinter模块的GUI

基本上使用tkinter来开发GUI应用需要以下5个步骤:

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

需要说明的是,GUI应用通常是事件驱动式的,之所以要进入主事件循环就是要监听鼠标、键盘等各种事件的发生并执行对应的代码对事件进行处理,因为事件会持续的发生,所以需要这样的一个循环一直运行着等待下一个事件的发生。另一方面,Tk为控件的摆放提供了三种布局管理器,通过布局管理器可以对控件进行定位,这三种布局管理器分别是:Placer(开发者提供控件的大小和摆放位置)、Packer(自动将控件填充到合适的位置)和Grid(基于网格坐标来摆放控件)

使用Pygame进行游戏开发

制作游戏窗口

这个时候之前做网站的经验排上用场了。

教程里面根本没有提到pygame应该如何安装,还好之前搭建网站的时候,对这个东西已经非常熟悉了。

Python
# ModuleNotFoundError: No module named 'pygame'
pip search pygame
# pygame (1.9.6)                         - Python Game Development
pip install pygame (1.9.6)

成了。

在窗口中绘图

正常

加载图像

首先遇到的问题就是./res/ball.png这个目录下( p.s. ./ 指代的是当前目录,这个在我们使用cd命令的时候也是一样的),我们是没有这个文件的。所以理所当然的,我们只能使用自己的图片加载上去。

Python
ball_image = pygame.image.load('C:\Users\hasee\Desktop')
#SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

这并是不编码格式出了问题,Python中的反斜杠用作转义序列和 \Uxxxx pattern is used to declare unicode characters while keeping source code ascii-only。在您的字符串中使用\Users\U后面的字符串是无效的十六进制数,因此会引发异常。修复的方式有两种。

Python
# 我自己的处理方法是,吧\换成/,这样不会出现\U这种错误。另一种则是所有\前面再加一个转义斜杠,也即变为\\。
 ball_image = pygame.image.load('C:/Users/hasee/Desktop/113.jpg')
# 有大佬提供了一个更方便的解决方案:mark string as raw 实际的操作也就是在这串字符前面加一个r
ball_image = pygame.image.load(r'C:\Users\hasee\Desktop\113.jpg')

拓展:此外,还有f string ,作用是格式化字符串。

Python
>>> name = "Fred"
>>> f"He said his name is {name!r}."
"He said his name is 'Fred'."
>>> f"He said his name is {repr(name)}."  # repr() is equivalent to !r
"He said his name is 'Fred'."
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
'result:      12.35'
>>> today = datetime(year=2017, month=1, day=27)
>>> f"{today:%B %d, %Y}"  # using date format specifier
'January 27, 2017'
>>> number = 1024
>>> f"{number:#0x}"  # using integer format specifier
'0x400'

实现动画效果

核心是

  x, y = x + 5, y + 5

碰撞检测+事件处理

Python
if self.x - self.radius <= 0 or \
                self.x + self.radius >= screen.get_width():
#\表示前后在同一行                
最后编辑于
文章链接: http://pheustal.com/2019/09-16/python_day10
本作品采用CC-BY-SA许可。