学Python的漫画漫步进阶 -- 第十三步

news2024/12/23 19:01:48

学Python的漫画漫步进阶 -- 第十三步

  • 十三、图形用户界面
    • 13.1 Python中的图形用户界面开发库
    • 13.2 安装wxPython
    • 13.3 第一个wxPython程序
    • 13.4 自定义窗口类
    • 13.5 在窗口中添加控件
    • 13.6 事件处理
    • 13.7 布局管理
      • 13.7.1 盒子布局管理器
      • 13.7.2 动动手——重构事件处理示例
      • 13.7.3 动动手——盒子布局管理器嵌套示例
    • 13.8 控件
      • 13.8.1 文本输入控件
      • 13.8.2 复选框和单选按钮
      • 13.8.3 列表
      • 13.8.4 静态图片控件
    • 13.9 点拨点拨——如何使用wxPython官方文档
    • 13.10 练一练
    • 13.11 图形用户界面总结

十三、图形用户界面

我们之前的程序运行结果都被输出到命令提示符(终端)窗口,界面比较简陋。本章讲解如何将其输出到图形界面。Python具有多种库可以创建图形用户界面(GUI)

在这里插入图片描述

13.1 Python中的图形用户界面开发库

在这里插入图片描述

注Qt是一个跨平台的C++应用程序开发框架,被广泛用于开发GUI程序,也可用于开发非GUI程序。

1 Tkinter
Tkinter是Python官方提供的图形用户界面开发库,用于封装Tk GUI工具包,跨平台。但是,Tkinter工具包所包含的控件较少,帮助文档不健全,不便于我们开发复杂的图形用户界面。

2 PyQt
PyQt是非Python官方提供的图形用户界面开发库,用于封装Qt工具包,跨平台。若想使用PyQt工具包,则需要额外安装软件包。

3 wxPythonwxPython是非Python官方提供的图形用户界面开发库,也跨平台。它提供了丰富的控件,可用于开发复杂的图形用户界面。它的工具包帮助文档很完善,案例也很丰富。

13.2 安装wxPython

在这里插入图片描述

在命令提示符(终端)窗口输入pip指令:
在Windows平台上通过pip指令安装wxPython,在命令提示符窗口输入如下指令。

在这里插入图片描述
如果安装成功,则可以出现如下窗口:
在这里插入图片描述

13.3 第一个wxPython程序

图形用户界面主要是由窗口及窗口中的控件构成的,编写wxPython程序其实主要是创建窗口和添加控件的过程。
若要构建一个最简单的wxPython程序,则至少需要一个应用(wx.App)对象和一个窗口(wx.Frame)对象。
示例代码如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过Python指令在命令提示符窗口中运行文件:

在这里插入图片描述

在这里插入图片描述

运行并输出结果,弹出如下窗口。
注 libpng是一款用C语言编写的比较底层的读写PNG文件的库,跨平台。

13.4 自定义窗口类

13.3节的示例过于简单,我们可以自定义窗口(wx.Frame)类,以便于扩展功能。
示例代码如下:
在这里插入图片描述

13.5 在窗口中添加控件

我们在窗口中添加两个控件:一个面板(Panel)和一个静态文本(StaticText)。面板是一个没有标题栏的容器(可以容纳其他控件的控件)。

在这里插入图片描述

示例代码如下:

在这里插入图片描述

在以上示例中,面板被放到窗口中,而静态文本对象被放到面板中

在这里插入图片描述
在这里插入图片描述

13.6 事件处理

图形界面的控件要响应用户的操作,就必须添加事件处理机制。事件处理的过程如下图所示。

在这里插入图片描述
其中涉及的主要内容如下。

1 事件源:事件发生的场所,就是各个控件,例如按钮事件的事件源是按钮。

2 事件:wxPython中的事件被封装为事件类wx.Event及其子类,例如按钮事件类是wx.CommandEvent,鼠标事件类是wx.MoveEvent。

3 事件处理程序:一个响应用户事件的方法。
下面通过一个示例介绍事件处理流程。在以下窗口中有一个按钮和一个静态文本,在单击OK按钮时会改变静态文本显示的内容。

在这里插入图片描述

在这里插入图片描述

示例代码如下:

在这里插入图片描述

13.7 布局管理

在这里插入图片描述

wxPython提供了布局管理器类帮助实现界面布局,主要分为两大类:盒子布局管理器和网格布局管理器。盒子布局类似于CSS中的弹性布局,非常灵活,我们重点介绍盒子布局。

13.7.1 盒子布局管理器

盒子布局管理器类是wx.BoxSizer,Box布局管理器是最常用的布局管理器,它可以让其中的子窗口(或控件)沿垂直或水平方向布局。

在这里插入图片描述

1 创建盒子布局管理器对象
我们使用wx.BoxSizer类创建盒子布局管理器对象,主要的构造方法
如下:
在这里插入图片描述
设置为水平方向布局,
在这里插入图片描述
设置为垂直方向布局
wx.HORIZONTAL是默认值,可以省略

2 添加子窗口(或控件)到父窗口
我们使用wx.BoxSizer对象的Add()方法添加子窗口(或控件)到父窗口,对Add()方法的语法说明如下:
在这里插入图片描述
添加到父窗口
在这里插入图片描述
proportion参数用于设置当前子窗口(或控件)在父窗口中所占的空间比例;flag参数是布局标志,用来控制对齐方式、边框和调整尺寸;border参数用于设置边框的宽度。
下面重点介绍flag标志,flag标志可以分为对齐、边框和调整尺寸。

flag对齐标志如下表所示:
在这里插入图片描述

flag边框标志如下表所示:

在这里插入图片描述
flag调整尺寸标志如下表所示:

在这里插入图片描述

13.7.2 动动手——重构事件处理示例

13.6节的事件处理示例采用了绝对布局,本节采用盒子布局重构该示例:

在这里插入图片描述
在这里插入图片描述
示例代码如下:

在这里插入图片描述
对两个控件布局说明如下:

在这里插入图片描述

13.7.3 动动手——盒子布局管理器嵌套示例

布局管理器还可以进行嵌套,我们通过一个示例介绍盒子布局管理器的嵌套。在该示例窗口中包括两个按钮和一个静态文本。

在这里插入图片描述
示例代码如下:

在这里插入图片描述

在本例中采用了嵌套布局,首先将两个按钮(b1和b2)放到一个水平方向的盒子布局管理器对象(hbox)中,然后将一个静态文本(statictext)和hbox放到一个垂直方向的盒子布局管理器对象(vbox)中。
在这里插入图片描述

13.8 控件

wxPython的所有控件都继承自wx.Control类。之前的示例已经使用了静态文本和按钮,本节重点介绍文本输入控件、单选按钮、复选框、列表和静态图片控件。

13.8.1 文本输入控件

文本输入控件(wx.TextCtrl)是可以输入文本的控件。

在这里插入图片描述

动动手

在界面中实现三个文本输入控件和三个静态文本:

在这里插入图片描述

示例代码如下:

在这里插入图片描述

13.8.2 复选框和单选按钮

多选控件是复选框(wx.CheckBox),复选框(wx.CheckBox)有时也能单独使用,能提供两种状态的开和关。
单选控件是单选按钮(wx.RadioButton),同一组的多个单选按钮应该具有互斥性,就是当一个按钮按下时,其他按钮一定释放。

动动手

在界面中实现一组复选框和一组单选按钮:

在这里插入图片描述

在这里插入图片描述

示例代码如下:

在这里插入图片描述
在这里插入图片描述

通过Python指令运行文件:

在这里插入图片描述

13.8.3 列表

对列表控件可以进行单选或多选,列表控件类是wx.ListBox。

动动手

在界面中实现以下两个列表控件:

在这里插入图片描述
在这里插入图片描述

示例代码如下:

在这里插入图片描述
在这里插入图片描述
wx.LB_SINGLE:单选。
wx.LB_MULTIPLE:多选。
wx.LB_EXTENDED:多选,但是需要在按住Ctrl或Shift键时选择项目。
wx.LB_SORT:对列表选择项进行排序。

13.8.4 静态图片控件

静态图片控件用于显示一张图片,图片可以是wx.Python所支持的任意图片格式,静态图片控件类是wx.StaticBitmap。

动动手

在界面中实现两个按钮和一个静态图片控件,在单击按钮时显示不同的图片。
示例代码如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

13.9 点拨点拨——如何使用wxPython官方文档

在这里插入图片描述
1 打开wxPython官网页面:

在这里插入图片描述

2 打开官方API帮助文档:

在这里插入图片描述
3 使用API帮助文档:

在这里插入图片描述

13.10 练一练

1 请在官方文档中查找下拉列表控件(wx.ComboBox)的使用方法。

2 判断对错:(请在括号内打√或×,√表示正确,×表示错误)。

1)静态图片控件在替换图片后,需要重写绘制窗口,否则布局会发生混乱。()

2)盒子布局管理器可以让其中的子窗口(或控件)沿垂直或水平方向布局,但布局管理器本身不能嵌套。()

13.11 图形用户界面总结

Python具有多种库可以创建图形用户界面(GUI)。其中一些库包括Tkinter、PyQt、PySide、wxPython、Kivy、Pygame、Pyglet和Matplotlib等。这些库的选择取决于开发者的具体需求,例如应用程序的复杂性、需要支持的平台类型,以及开发者对库本身的喜好等。

其中,Tkinter是Python的标准库之一,无需额外安装。它适用于简单的应用程序,并且对初学者非常友好。PyQt和PySide是Qt库的Python绑定,适用于创建跨平台应用程序。wxPython是wxWidgets的Python绑定,目标是创建优雅、高效的GUI。Kivy是一个开源的Python库,用于开发多触点应用,适用于创建平板电脑和智能手机应用程序。Pygame和Pyglet是用于开发游戏和多媒体应用程序的库。Matplotlib是一个用于数据可视化的库,也可用于创建GUI。PyGTK是GTK+库的Python绑定,主要用于Linux应用程序,但也可用于其他平台。

总之,Python具有多种GUI库可供选择,开发者可以根据自己的需求选择最适合的库来创建图形用户界面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赴日开发工程师工作怎么找?

想要做赴日开发工作的途径有一下几种:一个是自己去联系日本的企业,当然这种的前提是你日语完全没有问题,但是现在很少有企业愿意直接与求职人员沟通。第二个就是你有IT技术,但是不会日语,年纪不大的可以来日本读个学校…

单目标追踪——【工具】汉明窗(Hamming window)

目录 汉明窗(Hamming window)原理作用代码实例可视化总结 汉明窗(Hamming window) 原理 汉明(Hanning)窗可以看成是升余弦窗的一个特例,汉宁窗可以看作是3个矩形时间窗的频谱之和,…

webpack实战:最新QQ音乐sign参数加密分析

文章目录 1. 写在前面2. 接口抓包分析3. 扣webpack代码4. 补浏览器环境5. 验证加密结果 1. 写在前面 现在!很多的网站使用Webpack加载和处理JS文件。所以对于使用了Webpack加载的JS代码,一旦它们被打包并在浏览器中执行,通常是难以直接阅读和…

选择正确的开发框架:构建高效、可维护的应用程序

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 在现代软件开发中…

python如何打包成应用

前几天有学生问,开发好的python代码如何打包给对方使用?对方没有python的安装执行环境。 python是一个强大的编程开发工具,它不仅仅是做一些命令行或脚本运行工具,还可以开发桌面、web等应用。 本文就介绍使用pyinstall如何把py…

GIS前端编程-地理事件动态模拟

GIS前端编程-地理事件动态模拟 动画特效功能图形闪烁要素轨迹移动 动画特效功能 目前,GIS应用除了涉及地理位置信息,还要结合时间维度,这样才能更加真实地模拟现实世界的事物。因此在实际项目应用中,静态的(位置固定不…

Redis混合模式持久化原理

前言 前面文章中我们也介绍过Redis的持久化方式有两种:rdb持久化和aof持久化,具体详情可查看之前文章redis持久化。rdb持久化还是aof持久化它们都有各自的缺点。 rdb和aof缺点 rdb持久化:由于是定期对内存数据快照进行持久化,因此…

【智能家居-大模型】行业专题报告:ChatGPT等大模型催化智能家居行业发展

(报告出品方/作者:华安证券,马远方) 1 智能家居:ChatGPT 等大模型为行业发展带来新机遇 1.1 现状:智能家居产品的用户体验(交互能力、智能化水 平)及安全性待提升 智能家居&#…

编程获取图像中的圆半径

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 即将推出EmguCV的教程,请大家还稍作等待。 之前网友咨询如何获得图像中圆形的半径,其中有两个十字作为标定…

如何实现一个简单的深度优先搜索(DFS)算法?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现深度优先搜索⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前…

Qt Quick 之 QML 与 C++ 混合编程详解

Qt Quick 之 QML 与 C 混合编程详解 一、Qt Quick 之 QML 与 C 混合编程详解在 QML 中使用 C 类和对象实现可以导出的 C 类Q_INVOKABLE 宏Q_ENUMSQ_PROPERTY注册一个 QML 中可用的类型注册 QML 类型在 QML 中导入 C 注册的类型完整的 colorMaker 实例导出一个 C 对象为 QML 的属…

伴随矩阵与可逆矩阵

目录 伴随矩阵的概念与公式 可逆矩阵的概念与定理 逆矩阵的运算性质 伴随矩阵的概念与公式 伴随矩阵是一个与给定矩阵相关的矩阵,它的元素是给定矩阵的代数余子式。 给定一个nn的方阵A,其元素为aij,则A的伴随矩阵adj(A)是一个nn的方阵&…

EDI 许可证申请对网站有哪些要求?

EDI 许可证申请对网站有哪些要求? 1、电商类平台; 2、二手交易类平台; 3、外卖类平台; 4、票务交易类平台; 5、智能数据处理平台。 ​网站如果是上述类型,那就要办理EDI许可证,但EDI许可证…

北航投资携核心医疗获2023年度十佳投资案例

近日,全球PE论坛联合财新数据发布了2022-2023年度中国PE/VC行业评选结果,北航投资携核心医疗荣获2022-2023年度中国PE/VC十佳投资案例大奖。 经过7年的发展,北航投资的各项业务正密集地进入收获期,业务增长飞轮持续加速&#xff0…

vue拖拽插件 - Sortable

官网地址:Sortable.js中文网 使用方法: 1. npm安装 npm install sortablejs --save 2. 在组件中引入插件 import Sortable from "sortablejs"; 3. 给要拖动的table加上id用来获取dom,记得加row-key,不然会有显示问题 …

苹果“FindMy”APP

“FindMy”是一项 Apple 服务,可以定位设备。在 iOS 13 之前,Apple将该服务拆分为单独的应用程序:“查找我的 iPhone”(或 iPad 或 Mac)和“查找我的朋友”。该服务适用于iPhone、iPad、Mac、Apple Watch、AirPods、Ai…

麒麟v10安装Redis(ARM架构)

下载Redis安装包 华为开源镜像站_软件开发服务_华为云 上面的选择一个下载 或者用命令下载 wget https://repo.huaweicloud.com/kunpeng/yum/el/7/aarch64/Packages/bigdata/redis-5.0.5-1.el7.aarch64.rpm 检查是否已经安装Redis rpm -qa | grep redis将包卸载掉 rpm -e -…

AGV小车、机械臂协同作业实战03-opentcs5.9 运行体验

openTCS的控制核心是kernel,其内部有三种算法,分别为Dispater、Router、Scheduler。 本文主要介绍如何利用openTCS的plant overview平台进行基本的操作,主要内容来源于该软件内自带的opentcs-users-guide手册。 启动客户端 openTCS-Kernel…

Python中RESTful API的常见问题

RESTful API(Representational State Transfer)是一种设计风格,用于构建可扩展的和易于维护的Web服务。Python作为一门流行的编程语言,提供了丰富的库和工具来构建和实现RESTful API。然而,在实践过程中,我…

Matlab 分析 rosbag

在机器人的开发中,通常会使用rosbag工具来分析机器人的一些性能指标是否符合要求,在Windows平台,使用matlab分析rosbag是一个不错的选择,这里给出简单的使用示例: 示例:读取rosbag中机器人的位置信息&…