GUI图形用户界面编程
GUI图形用户界面编程,我们可以通过python提供丰富的组件,快速的实现使用图形界面和用户交互。GUI编程类似于“搭积木”,将一个个组件(Widget)放到窗口中。如下是windows中的绘画软件,就是一个典型的GUI程序:上面的各个按钮、菜单、编辑区域等都是一个个组件,它们都放置到窗口中,并通过增加“对事件的处理”成为一个完整的程序。
前言
GUI图形用户界面编程,我们可以通过python提供丰富的组件,快速的实现使用图形界面和用户交互。
GUI编程类似于“搭积木”,将一个个组件(Widget)放到窗口中。如下是windows中的绘画软件,就是一个典型的GUI程序:
上面的各个按钮、菜单、编辑区域等都是一个个组件,它们都放置到窗口中,并通过增加“对事件的处理”成为一个完整的程序。
常用的GUI库
1.Tkinter
tkinter(TK interface)是python的标准GUI库,支持跨平台的GUI程序开发。tkinter适合小型的GUI程序编写,也特别适合初学者学习GUI编程。
2.wxPython
wxPython是比较流行的GUI库,适合大型应用程序开发,功能强于tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes 微软基础类库)。
3.PyQT
QT是一种开源的GUI库,适合大型GUI程序开发,PyQT是Qt工具包标准的Python实现。我们可以使用Qt Desginer界面快速开发GUI应用程序。
GUI编程的核心步骤和第一个GUI程序
基于tkinter模块创建GUI程序包含如下4个核心步骤
1.创建应用程序主窗口对象(也称:根窗口)
(1)通过类Tk的无参构造
from tkinter import *
root=Tk()
2.在主窗口中,添加各种可视化组件
比如:按钮(Button)、文本框(Label)等
btn01=Button(root)
btn01["text"]="点击我可以给你带来好运"
3.通过几何布局管理器,管理组件的大小和位置
btn01.pack()
4.事件处理
(1)通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)
def songhua(e):
messagebox.showinfo("Message","希望能给你带来好运,天天开心")
print("天天开心")
btn01.bind("<Button-1>",songhua)
5.例子
from tkinter import *
from tkinter imiport messagebox
root=Tk()
btn01=Button(root)
btn01["text"]="希望能给你带来好运"
btn01.pack()
def songfu(e):
messagebox.showinfo("Message","送你祝福,希望你天天开心")
print("天天开心")
btn01.bind("<Button-1>",songfu)
root.mainloop() #调用组件的mainloop方法,进入事件循环
tkinter主窗口
主窗口位置和大小
通过geometry('wxh+-x+-y')进行设置。w为宽度,h为高度。+x表示距屏幕左边的距离;-x表示距屏幕右边的距离;+y表示距屏幕上边的距离;-y表示距屏幕下边的距离。
【示例】测试tkinter主窗口位置和大小的设置
from tkinter import *
root=Tk()
root.title("测试主窗口的位置和大小")
root.geometry("500x400+100+200") #宽度500,高度400;距离屏幕左边100,距离屏幕上边200
root.mainloop()
GUI编程整体描述
图形用户界面是由一个个组件组成,就像小孩“搭积木”一样最终组成了整个界面,有的组件还能在里面再放置其他组件,我们称为“容器”,Tkinter的GUI组件关系图如下:
根据上图所示,我们依次讲解这些类的基本作用
Misc和Wm:
Tkinter 的 GUI 组件有两个根父类,它们都直接继承了object类;
- Misc:它是所有组件的根父类。
- Wm:它主要提供了一些与窗口管理通信的功能函数
TK
Misc和Vm派生出子类Tk,它代表应用程序的主窗口,一般应用程序都需要直接或间接使用Tk.
Pack、Place、Grid
Pack、Place、Grid是布局管理器、布局管理器管理组件的:大小、位置。通过管理器可以将容器中的组件实现合理的排布。
BaseWidget
BaseWidget是所有组件的父类
Widget
Widget是所有组件类的父类。Widget一共有四个父类:BaseWidget、Pack、Grid、Place。意味着,所有GUI组件同时具备这四个父类的属性和方法。
【注】想观察类的层次结构可以在类定义处的类名上单击右键,选择Diagram-->show Diagram
常用组件汇总列表
Tkinter类 | 名词 | 简介 |
---|---|---|
Toplevel | 顶层 | 容器类,可用于为其他组件提供单独的容器;Toplevel有点类似于窗口 |
Button | 按钮 | 代表按钮组件 |
Canvas | 画布 | 提供绘画功能、包括直线、矩形、椭圆、多边形、位图等 |
Checkbutton | 复选框 | 可供用户勾选的复选框 |
Entry | 单行输入框 | 用户可输入内容 |
Frame | 容器 | 用于装载其它GUI组件 |
Label | 标签 | 用于显示不可编辑的文本或图标 |
LabelFrame | 容器 | 也是容器组件,类似Frame,但它支持添加标题 |
Listbox | 列表框 | 列出多个选项,供用户选择 |
Menu | 菜单 | 菜单组件 |
Menubutton | 菜单按钮 | 用来包含菜单的按钮(包括下拉式、层叠式等) |
OptionMenu | 菜单按钮 | Menubutton的子类,也代表菜单按钮,可通过按钮打开一个菜单 |
Message | 消息框 | 类似于标签,但可以显示多行文本;后来当Label也能显示多行文本之后,该组件基本处于废弃状态 |
PanedWindwo | 分区窗口 | 该容器会被划分成多个区域,每添加一个组件占一个区域,用户可通过拖动分隔线来改变各区域的大小 |
Radiobutton | 单选按钮 | 可供用户点边的单选按钮 |
Scale | 滑动调 | 拖动滑块可设定起始值和结束值 |
Spinbox | 微调选择器 | 用户可通过该组件的向上、向下箭头选择不同的值 |
Scrollbar | 滚动条 | 用于为组件(文本域、画布、列表框、文本框)提供滚动功能 |
Text | 多行文本框 | 显示多行文本 |
GUI应用程序类的经典写法
本节程序也是GUI应用程序编写的一个主要结构,采用了面向对象的方式,更加合理的组织代码。
通过类Application组织了整个GUI程序,类Application继承了Frame及通过继承拥有了父类的特性。通过构造函数__init__()初始化窗口中的对象,通过createWidgets()方法创建窗口中的对象。
Frame框架是一个tkinter组件,表示一个矩形的区域。Frame一般作为容器使用,可以放置其它组件,从而实现复杂的布局。
【示例】标准的GUI程序类的写法
import tkinter as tk
from tkinter import messagebox
class Application(tk.Frame): # 1. 这里明确指定继承自tk.Frame,原代码继承关系不太清晰
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
"""创建组件"""
self.btn01 = tk.Button(self)
self.btn01["text"] = "祝你好运"
self.btn01.pack()
self.btn01["command"] = self.songfu
# 创建一个退出按钮
self.btnQuit = tk.Button(self, text="退出", command=self.master.destroy) # 2. 退出按钮的command应该绑定到主窗口的destroy方法,这里用self.master指代主窗口
self.btnQuit.pack()
def songfu(self):
messagebox.showinfo("提示", "新年快乐,天天开心") # 3. showinfo方法第一个参数通常为消息框标题,原代码缺少标题参数
if __name__ == "__main__":
root = tk.Tk()
root.geometry("400x100+200+300")
root.title("一个经典的GUI程序类的测试")
app = Application(master=root) # 4. 这里将实例化的对象赋值给一个新变量名,避免和后面的mainloop调用混淆,原代码直接用root重新赋值不太合适
root.mainloop()

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)