Python图形用户界面和游戏开发
开始Python的复习!(以前学的忘了好多-_-)
主要参考的是Github上的一个项目:https://github.com/jackfrued/Python-100-Days
文章主要是对该项目中的内容进行学习 穿插一点自己的学习想法等内容~
基于tkinter模块的GUI
GUI是图形用户界面的缩写,Python默认的GUI开发模块是tkinter。从名字中可以看出他是基于Tk的,Tk是一个工具包,提供了跨平台的GUI组件。
事实上,开发GUI应用并不是Python最擅长的工作,如果真的需要使用Python开发GUI应用,wxPython、PyQt、PyGTK等模块都是不错的选择。
使用tkinter来开发GUI应用需要以下5个步骤:
- 导入tkinter模块中我们需要的东西
- 创建一个顶层窗口对象并用它来承载整个GUI应用
- 在顶层窗口欧对象上添加GUI组件
- 通过代码将这些GUI组件的功能组织起来
- 进入主事件循环
# !/usr/bin/env python
# 第一句话:配置解释器路径
# -*- coding:utf-8 -*-
# 第二句话:文件编码
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)
# 创建按钮对象、指定添加到哪个容器中,通过command参数绑定事件回调函数
button1 = tkinter.Button(panel, text='修改', command=change_label_text)
button1.pack(side='left')
button2 = tkinter.Button(panel, text='退出', command=confirm_to_quit)
button2.pack(side='right')
panel.pack(side='bottom')
# 开启主事件循环
tkinter.mainloop()
if __name__ == '__main__':
main()
上述代码只是构建一个简单的按钮,实际上就是先构造画布、摆好UI设计,然后和对应的按钮事件连接起来。(期间设置大小、颜色等各种格式)
需要说明的是,GUI应用通常是事件驱动式的,之所以要进入主事件循环就是要监听鼠标、键盘等各种事件的发生并执行对应的代码对事件进行处理,因为事件会持续的发生,所以需要这样的一个循环一直运行着等待下一个事件的发生。另一方面,Tk为控件的摆放提供了三种布局管理器,通过布局管理器可以对控件进行定位,这三种布局管理器分别是:Placer(开发者提供控件的大小和摆放位置)、Packer(自动将控件填充到合适的位置)和Grid(基于网格坐标来摆放控件)