第二部分 Python提高—GUI图形用户界面编程(一)

常用的GUI 库

  1. Tkinter
    tkinter(Tk interface)是Python 的标准GUI 库,支持跨平台的GUI 程序开发。tkinter适合小型的GUI 程序编写,也特别适合初学者学习GUI 编程。本次以tkinter 为核心进行讲解。
  2. wxPython
    wxPython 是比较流行的GUI 库,适合大型应用程序开发,功能强于tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes 微软基础类库)。
  3. PyQT
    Qt 是一种开源的GUI 库,适合大型GUI 程序开发,PyQT 是Qt 工具包标准的Python 实现。我们也可以使用Qt Desginer 界面设计器快速开发GUI 应用程序。

tkinter 官方网址:
https://docs.python.org/3.7/library/tk.html 或者:http://effbot.org/tkinterbook/

GUI 编程的核心步骤和第一个GUI 程序

基于tkinter 模块创建GUI 程序包含如下4 个核心步骤:

  1. 创建应用程序主窗口对象(也称:根窗口):通过类Tk 的无参构造函数
 from tkinter import *
root = Tk()
  1. 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等。
btn01 = Button(root)
btn01["text"] = "点我就送花"
  1. 通过几何布局管理器,管理组件的大小和位置
btn01.pack()
  1. 事件处理
    通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)
def songhua(e):
	messagebox.showinfo("Message","送你一朵玫瑰花,请你爱上我")
	print("送你99 朵玫瑰花")
btn01.bind("<Button-1>",songhua)

示例

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("<Button-1>",songhua)
root.mainloop()

调整窗口位置和大小

主窗口位置和大小

通过geometry(‘wxh±x±y’)进行设置。w 为宽度,h 为高度。+x 表示距屏幕左边的距离;-x 表示距屏幕右边的距离;+y 表示距屏幕上边的距离;-y 表示距屏幕下边的距离。

from tkinter import *
root = Tk()
root.title("测试主窗口的位置和大小")
root.geometry("500x400+100+200") #宽度500,高度400;距屏幕左边100,距屏幕上边200
root.mainloop()

在这里插入图片描述

GUI 编程整体描述

图形用户界面是由一个个组件组成,就像小孩“搭积木”一样最终组成了整个界面。有的组件还能在里面再放置其他组件,我们称为“容器”。Tkinter 的GUI 组件关系图如下:

根据上图所示,讲解这些类的基本作用。
Misc 和Wm、Tk:Tkinter 的GUI 组件有两个根父类,它们都直接继承了object 类:
·Misc:它是所有组件的根父类。
·Wm:它主要提供了一些与窗口管理器通信的功能函数。
·Tk 是由Misc 和Wm 派生出的子类,它代表应用程序的主窗口。一般应用程序都需要直接或间接
使用Tk。

Pack、Place、Grid 是布局管理器。布局管理器管理组件的:大小、位置。通过布局管理器可以将容器中的组件实现合理的排布。

*BaseWidget* 是所有组件的父类。Widget 是所有组件类的父类。Widget 一共有四个父类:BaseWidget、Pack、Grid、Place。意味着,所有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 多行文本框显示多行文本

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):
        """创建组件"""
        self.btn01 = Button(self)
        self.btn01["text"] = "点击送花"
        self.btn01.pack()
        self.btn01["command"] = self.songhua
        # 创建一个退出按钮
        self.btnQuit = Button(self, text="退出", command=root.destroy)
        self.btnQuit.pack()
    def songhua(self):
        messagebox.showinfo("送花","送你99 朵玫瑰花")
if __name__ == '__main__':
    root = Tk()
    root.geometry("400x100+200+300")
    root.title("一个经典的GUI 程序类的测试")
    app = Application(master=root)
    root.mainloop()
  • 33
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44006060

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值