Python 100 -- day 10图形用户界面和游戏开发

    技术2026-02-12  20

    目录

    基于tkinter模块的GUI

    实例

    使用Pygame开发游戏

    实例:大球吃小球


    基于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

    Processed: 0.009, SQL: 9