✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:python图形化GUI编程tkinter精讲
景天的主页:景天科技苑
文章目录
1.GUI 图形用户界面编程
我们之前实现的都是基于控制台的程序,程序和用户的交互通过控制台来完成。
本章,我们将学习 GUI(Graphics User Interface),即图形用户界面编程,我们
可以通过 python 提供的丰富的组件,快速的实现使用图形界面和用户交互。
GUI 编程类似于“搭积木”,将一个个组件(Widget)放到窗口中。如下是 windows 中的
画图软件,就是一个典型的 GUI 程序:
上面的各种按钮、菜单、编辑区域等都是一个个组件,它们都放置到窗口中,并通过增
加“对事件的处理”成为一个完整的程序。
2.python中常用的 GUI 库
- Tkinter
tkinter(Tk interface)是 Python 的标准 GUI 库,支持跨平台的 GUI 程序开发。tkinter
适合小型的 GUI 程序编写,也特别适合初学者学习 GUI 编程。本章以 tkinter 为核心进行讲解。
- Tkinter
- wxPython
wxPython 是比较流行的 GUI 库,适合大型应用程序开发,功能强于 tkinter,整体设计框架类似于 MFC(Microsoft Foundation Classes 微软基础类库)。
- wxPython
- PyQT
Qt 是一种开源的 GUI 库,适合大型 GUI 程序开发,PyQT 是 Qt 工具包标准的 Python 实现。我们也可以使用 Qt Desginer 界面设计器快速开发 GUI 应用程序。
- PyQT
1.tkinter 模块
本章中,涉及大量的 API 讲解。学习 API 最好的来源就是官方提供的文档:tkinter 官
方网址:https://docs.python.org/3.11/library/tk.html
2.GUI编写程序步骤
GUI 编程的核心步骤和第一个 GUI 程序
基于 tkinter 模块创建 GUI 程序包含如下 4 个核心步骤:
1. 创建应用程序主窗口对象(也称:根窗口)
(1) 通过类 Tk 的无参构造函数
from tkinter import * #创建个窗口 root = Tk()
此时创建窗口,运行后不会出现我们创建的窗口
此时,需要调用组件的 mainloop 方法,进入事件循环,才会出现窗口
root.mainloop()
此时就会弹出窗口,程序处于阻塞状态。就是个死循环,用来监听用户是否有操作,进入相应的方法执行一些事件
2. 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等。
#创建button对象,将窗口作为参数传进去,表示把button放进窗口里 btn01 = Button(root) btn01["text"] = "点我就送花"
3. 通过几何布局管理器,管理组件的大小和位置
btn01.pack()
此时运行程序,只显示个按钮,点击也没反应
需要对事件进行处理
4. 事件处理
(1) 通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)
#事件处理 #通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等) #方法里面传一个参数,e表示事件对象 def songhua(e): #显示到窗口上的信息,需要导入模块messagebox messagebox.showinfo("Message","送你一朵玫瑰花,请你爱上我") print("送你 99 朵玫瑰花") print("e是什么",e) #事件绑定,bind第一个参数 <Button-1>表示鼠标左键单击,第二个参数是事件函数 btn01.bind("<Button-1>",songhua)
此时运行程序,点击按钮,就会在窗口上显示出我们设置的内容
点击确定,可以看到控制台打印
5.完整代码
from tkinter import * from tkinter import messagebox #创建个窗口 root = Tk() #在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等。 #创建button对象,将窗口作为参数传进去,表示把button放进窗口里 btn01 = Button(root) btn01["text"] = "点我就送花" #通过几何布局管理器,管理组件的大小和位置 btn01.pack() #事件处理 #通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等) #方法里面传一个参数,e表示事件对象 def songhua(e): #显示到窗口上的信息,需要导入模块messagebox messagebox.showinfo("Message","送你一朵玫瑰花,请你爱上我") print("送你 99 朵玫瑰花") print("e是什么",e) #事件绑定,bind第一个参数 <Button-1>表示鼠标左键单击,第二个参数是事件函数 btn01.bind("<Button-1>",songhua) #需要调用组件的 mainloop 方法,进入事件循环,才会出现窗口 root.mainloop()