目录
基于tkinter模块的GUI
使用tkinter开发GUI需要5个步骤:
- 导入tkinter模块中我们需要的东西
- 创建一个顶层窗口对象并用它来承载整个GUI应用
- 在顶层窗口对象上添加GUI组件
- 通过代码将这些GUI组件的功能组织起来
- 进入主事件循环(main loop)
实例
import tkinter
import tkinter.messagebox
def main():
flag = True
def change_label_text():
nonlocal flag
flag = not flag
color, msg = ('red', 'Hello world!')\
if flag else ('blue', 'Goodbye, world!')
label.config(text=msg, fg=color)
def confirm_to_quit():
if tkinter.messagebox.askokcancel('温馨提示', '确定要退出吗'):
top.quit()
top = tkinter.Tk()
top.geometry('240x160')
top.title('小游戏')
label = tkinter.Label(top, text='Hello,world',
font = 'Arial -32', fg = 'red')
label.pack(expand = 1)
panel = tkinter.Frame(top)
button1 = tkinter.Button(panel, text='修改', command = change_label_text)
button2 = tkinter.Button(panel, text='退出', command = confirm_to_quit)
button1.pack(side='left')
button2.pack(side='right')
panel.pack(side='bottom')
tkinter.mainloop()
if __name__ == '__main__':
main()
使用Pygame开发游戏
实例:大球吃小球
- 在窗口中绘图
- 加载图像
- 实现动画效果
- 碰撞检测
- 事件处理
from enum import Enum, unique
from math import sqrt
from random import randint
import pygame
@unique
class Color(Enum):
RED = (255,0,0)
GREEN = (0,255,0)
BULE = (0,0,255)
BLACK = (0,0,0)
WHITE = (255,255,255)
GRAY = (242,242,242)
@staticmethod
def random_color():
r = randint(0,255)
g = randint(0,255)
b = randint(0,255)
return (r, g, b)
class Ball(object):
def __init__(self, x, y, radius, sx, sy, color=Color.RED):
self.x = x
self.y = y
self.radius = radius
self.sx = sx
self.sy = sy
self.color = color
self.alive = True
def move(self, screen):
self.x += self.sx
self.y += self.sy
if self.x - self.radius <= 0 or \
self.x + self.radius >= screen.get_width():
self.sx = -self.sx
if self.y - self.radius <= 0 or \
self.y + self.radius >= screen.get_height():
self.sy = -self.sy
def eat(self, other):
if self.alive and other. alive and self != other:
dx, dy = self.x - other.x, self.y - other.y
distance = sqrt(dx**2 + dy**2)
if distance < self.radius + other.radius \
and self.radius > other.radius:
other.alive = False
self.radius = self.radius + int(other.radius * 0.146)
def draw(self, screen):
pygame.draw.circle(screen, self.color, (self.x, self.y), self.radius, 0)
def main():
balls = []
pygame.init()
screen = pygame.display.set_mode((800,600))
#print(screen.get_width())
#print(screen.get_height())
pygame.display.set_caption('大球吃小球')
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
x, y = event.pos
radius = randint(10,100)
sx, sy = randint(-10,10), randint(-10,10)
color = Color.random_color()
ball = Ball(x, y, radius, sx, sy, color)
balls.append(ball)
screen.fill((255,255,255))
for ball in balls:
if ball.alive:
ball.draw(screen)
else:
balls.remove(ball)
pygame.display.flip()
pygame.time.delay(50)
for ball in balls:
ball.move(screen)
for other in balls:
ball.eat(other)
if __name__ == '__main__':
main()
学习pygame最好的教程是pygame的官网 https://www.pygame.org/news,若是想要开发3D游戏不妨看看Panda3D