一、tkinter模块的GUI

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

导入tkinter模块中我们需要的东西。

创建一个顶层窗口对象并用它来承载整个GUI应用。

在顶层窗口对象上添加GUI组件。

通过代码将这些GUI组件的功能组织起来。

进入主事件循环(main loop)。

python将窗口置顶 pygame窗口置顶_背景色

代码:

python将窗口置顶 pygame窗口置顶_初始化_02

python将窗口置顶 pygame窗口置顶_ci_03

1 importtkinter2 importtkinter.messagebox3
4 defmain():5 flag =True6 #修改标签上的文字
7 defchange_label_text():8 nonlocal flag9 flag = notflag10 color,msg = ('red','hello,world')\11 if flag else ('blue','Goodbye,world!')12 label.config(text=msg, fg=color)13 #确认退出
14 defconfirm_to_quit():15 if tkinter.messagebox.askokcancel('温馨提示','确认要退出吗?'):16 top.quit()17
18 #创建顶层窗口
19 top =tkinter.Tk()20 #设置窗口大小
21 top.geometry('240x160')22 #设置窗口标题
23 top.title('小游戏')24 #创建标签对象并添加到顶层窗口
25 label = tkinter.Label(top,text='hello,world!',font = 'Arial -32',fg = 'red')26 label.pack(expand = 1)27 #创建一个装按钮的容器
28 panel =tkinter.Frame(top)29 #创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数30 button1 = tkinter.Button(panel,text = '修改',command =change_label_text)31 button1.pack(side = 'left')32 button2 = tkinter.Button(panel,text = '退出',command =change_label_text)33 button2.pack(side = 'right')34 panel.pack(side = 'bottom')35 #开启主事件循环36 tkinter.mainloop()37 #主函数
38 if __name__ == '__main__':39 main()
View Code

二、pygame的游戏窗口

制作游戏窗口

1 importpygame2 defmain():3 #初始化导入pygame中的模块
4 pygame.init()5 #初始化用于显示的窗口并设置窗口尺寸
6 screen = pygame.display.set_mode((800,600))7 #设置当前窗口的标题
8 pygame.display.set_caption('大球吃小球')9 running =True10 #开启一个事件 循环处理发生的事件
11 whilerunning:12 for event inpygame.event.get():13 if event.type ==pygame.QUIT:14 running =False15 if __name__ == '__main__':16 main()

运行效果:

python将窗口置顶 pygame窗口置顶_背景色_04

三、往游戏窗口里画一个圆

通过pygame中draw模块的函数在窗口上绘图,可以绘制的图形包括:线条、矩形、多边形、圆、椭圆、圆弧等。需要说明的是,屏幕坐标系是将屏幕左上角设置为坐标原点(0, 0),向右是x轴的正向,向下是y轴的正向,在表示位置或者设置尺寸的时候,我们默认的单位都是像素。所谓像素就是屏幕上的一个点,你可以用浏览图片的软件试着将一张图片放大若干倍,就可以看到这些点。pygame中表示颜色用的是色光三原色表示法,即通过一个元组或列表来指定颜色的RGB值,每个值都在0~255之间,因为是每种原色都用一个8位(bit)的值来表示,三种颜色相当于一共由24位构成,这也就是常说的“24位颜色表示法”。

1 importpygame2 defmain():3 #初始化导入pygame中的模块
4 pygame.init()5 #初始化用于显示的窗口并设置窗口尺寸
6 screen = pygame.display.set_mode((800,600))7 #设置当前窗口的标题
8 pygame.display.set_caption('大球吃小球')9
10 #设置窗口的背景色
11 screen.fill((242,242,242))12 #绘制一个圆,参数分别为:(屏幕,颜色,圆心位置,半径,0表示填充圆)
13 pygame.draw.circle(screen,(255,0,0),(100,100),30,0)14 #刷新当前窗口
15 pygame.display.flip()16 running =True17 #开启一个事件 循环处理发生的事件
18 whilerunning:19 for event inpygame.event.get():20 if event.type ==pygame.QUIT:21 running =False22 if __name__ == '__main__':23 main()

画了一个圆:

python将窗口置顶 pygame窗口置顶_python100行小游戏 pygame_05

四、加载图像

使用pygame中image模块的函数来加载图像,再通过之前获得的窗口对象的blit方法渲染图像。

ball_image = pygame.image.load("ball.png")

#刷新当前窗口

pygame.display.flip()

效果图

python将窗口置顶 pygame窗口置顶_初始化_06

五、实现动画效果

要让上面代码中的小球动起来,可以将小球的位置用变量来表示,并在循环中修改小球的位置再刷新整个窗口即可。

importpygamedefmain():#初始化导入pygame中的模块
pygame.init()#初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800,600))#设置当前窗口的标题
pygame.display.set_caption('大球吃小球')#定义变量来表示小球在屏幕上的位置
x,y = 50,50running=True#开启一个事件 循环处理发生的事件
whilerunning:for event inpygame.event.get():if event.type ==pygame.QUIT:
running=False#设置窗口的背景色
screen.fill((255, 255, 255))#绘制一个圆,参数分别为:(屏幕,颜色,圆心位置,半径,0表示填充圆)
pygame.draw.circle(screen,(255,0,0),(x,y),30,0)#刷新当前窗口
pygame.display.flip()#每隔50毫秒改变小球的位置
pygame.time.delay(50)
x,y= x+5,y+5running=Trueif __name__ == '__main__':
main()
效果图
六、加入碰撞检测,做成一个大球吃小球小游戏
代码
from enum importEnum,uniquefrom math importsqrtfrom random importrandintimportpygame#unique
classColor(Enum):"""颜色配置"""RED= (255,0,0)
GREEN= (0,255,0)
BLUE= (0,0,255)
BLACK=(0,0,0)
WHITE= (255,255,255)
GRAY= (242,242,242)#随机获取颜色
defrandom_color():
r= randint(0,255)
g= randint(0,255)
b= randint(0,255)return(r,g,b)classBall(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=Truedefmove(self,screen):"""移动"""self.x+=self.sx
self.y+=self.syif self.x - self.radius <= 0 or self.x + self.radius >=screen.get_width():
self.sx= -self.sxif self.y - self.radius <= 0 or self.y + self.radius >=screen.get_width():
self.sy= -self.sydefeat(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 other.radius:
other.alive=False
self.radius= self.radius + int(other.radius*0.146)defdraw(self,screen):"""在窗口上绘制球"""pygame.draw.circle(screen,self.color,(self.x,self.y),self.radius,0)defmain():
balls= [] #装球的容器
#初始化导入pygame中的模块
pygame.init()#初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800,600))#设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
running=True#开启一个事件 循环处理发生的事件
whilerunning:for event inpygame.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 inballs:ifball.alive:
ball.draw(screen)else:
balls.remove(ball)#刷新当前窗口
pygame.display.flip()#每隔50毫秒改变小球的位置
pygame.time.delay(50)for ball inballs:
ball.move(screen)#检查有没有吃到其它的球
for other inballs:
ball.eat(other)if __name__ == '__main__':
main()

最终效果图: