常用的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. 创建应用程序主窗口对象(也称:根窗口)通过类Tk的无参构造函数
  2. 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等
  3. 通过几何布局管理器,管理组件的大小和位置
  4. 事件处理,通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)

【示例】使用tkinter模块,创建GUI应用程序,并实现点击按钮的事件处理 :

from tkinter import *
from tkinter import messagebox  

root = Tk()
btn01 = Button(root)
btn01["text"] = "点我就送花"
btn01.pack()

def  songhua(e):
    messagebox.showinfo("Message","送你一朵玫瑰花,请你爱上我")
    print("送你99朵玫瑰花")

btn01.bind("",songhua) #为按钮绑定事件

root.mainloop()        #调用组件的mainloop方法,进入事件循环

GUI应用程序类的经典写法

GUI应用程序编写的一个主要结构,采用了面向对象的方式,更加合理的组织代码。

通过类Application组织整个GUI程序,类Application继承了Frame及通过继承拥有了父类的特性。通过构造函数__init__()初始化窗口中的对象,通过createWidgets()方法创建窗口中的对象。

Frame框架是一个tkinter组件,表示一个矩形的区域。Frame一般作为容器使用,可以放置其他组件,从而实现复杂的布局。

【示例】标准的GUI程序类的写法

from tkinter import *
from tkinter import messagebox


class Application(Frame):
    """一个经典的GUI程序的类的写法"""

    def __init__(self, master=None):
        super().__init__(master)    # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()


    def createWidget(self):
        """在此区域进行创建组件"""
       


if __name__ == '__main__':
    root = Tk()
    root.geometry("400x100+200+300")
    root.title("一个经典的GUI程序类写法")
    app = Application(master=root)
    root.mainloop()


面向对象的GUI写法是后面经常要使用到的,这种写法建议必须掌握


常用组件汇总列表

Tkinter类

名称

简介

Toplevel

顶层

容器类,可用于为其他组件提供单独的容器;Toplevel 有点类似于窗口

Button

按钮

代表按钮组件

Canvas

画布

提供绘图功能,包括直线、矩形、椭圆、多边形、位图等

Checkbutton

复选框

可供用户勾选的复选框

Entry

单行输入框

用户可输入内容

Frame

容器

用于装载其它 GUI 组件

Label

标签

用于显示不可编辑的文本或图标

LabelFrame

容器

也是容器组件,类似于Frame,但它支持添加标题

Listbox

列表框

列出多个选项,供用户选择

Menu

菜单

菜单组件

Menubutton

菜单按钮

用来包含菜单的按钮(包括下拉式、层叠式等)

OptionMenu

菜单按钮

Menubutton 的子类,也代表菜单按钮,可通过按钮打开一个菜单

Message

消息框

类似于标签,但可以显示多行文本;后来当 Label 也能显示多行文本之后,该组件基本处于废弃状态

PanedWindow

分区窗口

该容器会被划分成多个区域,每添加一个组件占一个区域,用户可通过拖动分隔线来改变各区域的大小

Radiobutton

单选钮

可供用户点边的单选钮

Scale

滑动条

拖动滑块可设定起始值和结束值,可显示当前位置的精确值

Spinbox

微调选择器

用户可通过该组件的向上、向下箭头选择不同的值

Scrollbar

滚动条

用于为组件(文本域、画布、列表框、文本框)提供滚动功能

Text

多行文本框

显示多行文本