前言        

        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()

Logo

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

更多推荐