13.Python图形用户界面

我们之前的程序运行结果都被输出到命令提示符(终端)窗口,界 面比较简陋。本章讲解如何将其输出到图形界面。

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

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

1 Tkinter

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

2 PyQt

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

3 wxPython

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

2 安装wxPython

在命令提示符(终端)窗口输入pip指令:

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

如果安装成功,则可以出现如下窗口。

3 第一个wxPython程序

图形用户界面主要是由窗口及窗口中的控件构成的,编写wxPython 程序其实主要是创建窗口和添加控件的过程。

若要构建一个最简单的wxPython程序,则至少需要一个应用(wx. App)对象和一个窗口(wx.Frame)对象。

示例代码如下:

4 自定义窗口类

3节的示例过于简单,我们可以自定义窗口(wx.Frame)类,以 便于扩展功能。 示例代码如下:

5 在窗口中添加控件

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

示例代码如下:

6 事件处理

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

其中涉及的主要内容如下。

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

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

3 事件处理程序:一个响应用户事件的方法。

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

7 布局管理

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

7.1 盒子布局管理器

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

1 创建盒子布局管理器对象

我们使用wx.BoxSizer类创建盒子布局管理器对象,主要的构造方法 如下:

设置为水平方向布局,

设置为垂直方向布局

wx.HORIZONTAL是默认值,可以省略

2 添加子窗口(或控件)到父窗口

我们使用wx.BoxSizer对象的Add()方法添加子窗口(或控件)到 父窗口,对Add()方法的语法说明如下:

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

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

对两个控件布局说明如下:

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

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

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

8 控件

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

8.1 文本输入控件

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

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

8.2 复选框和单选按钮

多选控件是复选框(wx.CheckBox),复选框(wx.CheckBox)有 时也能单独使用,能提供两种状态的开和关。

单选控件是单选按钮(wx.RadioButton),同一组的多个单选按钮 应该具有互斥性,就是当一个按钮按下时,其他按钮一定释放。

动动手 在界面中实现一组复选框和一组单选按钮。

通过Python指令运行文件。

8.3 列表

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

动动手 在界面中实现以下两个列表控件。

wx.LB_SINGLE:单选。

wx.LB_MULTIPLE:多选。

wx.LB_EXTENDED:多选,但是需要在按住Ctrl或Shift键时选择项 目。

wx.LB_SORT:对列表选择项进行排序。

8.4 静态图片控件

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

动动手 在界面中实现两个按钮和一个静态图片控件,在单击按钮时显示不 同的图片。

示例代码如下:

10 练一练

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 本地电脑服务部署

前提: 下载mysql 新建配置文档 在安装mysql目录新建 my.ini [mysqld] # 设置3306端口 port3306#设置mysql的安装目录 basedirC:\Program Files\MySQL\MySQL Server 8.3 #切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有…

探索AI技术创业的三大机遇

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 方向一:行业解决方案 方向二:智能产品和服务 方向三:教育和培训 结语 我的其他博客 前言…

vant4的TextEllipsis 文本省略,禁用展开,收起方法

一、需求: 实现多行文本展示,规定大于3行,显示省略号...和查看全部按钮;(并且考虑兼容性问题) 二、效果图: 三、实现: 如果自己写样式的话,可以对照这个链接实现CSS 实…

C++ vector 动态 向量/数组

文章目录 【 1. vector 的声明与初始化 】1.1 vector 的声明1.2 vector 的初始化1.2.1 构造一个空的 vector1.2.2 指定数量初值的方式初始化 vector1.2.3 迭代器的方式初始化1.2.4 构造一个相同的 vector 【 2. vector 的相关操作 】2.1 插入元素2.1.1 在vector的末尾插入新元素…

公司百度百科词条如何修改,五个公司百度百科词条修改技巧全揭秘!

当人们在搜索一个公司的信息时,通常会首先查找该公司的百度百科词条。作为一家公司,其百度百科词条的准确性和全面性对于公司形象的塑造至关重要。因此,如何修改公司的百度百科词条成为一项至关重要的任务。本文洛希爱做百科网将为您介绍公司…

uniapp创建opendb-city-china Schema文件后,如何导入城市的数据?

1.点击opendb-city-china后面的详情,进入到gitee代码仓库 2.下载如下图所示的data.json文件 3.将本地创建的opendb-city-china.schema.json上传到云端 4.点击导入json 如果直接将data.json导入会报错,如下图所示: 5.将data.json本来的数组对象&#…

日历插件fullcalendar【前端】

日历插件fullcalendar【前端】 前言版权开源推荐日历插件fullcalendar一、下载二、初次使用日历界面示例-添加事件,删除事件 三、汉化四、动态数据五、前后端交互1.环境搭建-前端搭建2.环境搭建-后端搭建3.代码编写-前端代码fullcalendar.htmlfullcalendar.js 4.代码…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 (1)关于CPU (2)关于内…

vue3中mars3d通过滑动条去改变地图图层的透明度

效果图 加滑动条 因为我这个存在单选框,在点击滑动条的时候 会出现将单选框选中的问题,所以用了一个div把滑动条包裹起来并加了冒泡 changeLiveSituationBg方法 // 改变底图显示颜色 val是我点击这个单选框对应值 const changeLiveSituationBg va…

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现3、调用scikit-learn库中KNN算法4、使用scikit-learn库生成数据集5、自定义函数划分数据集6、使用scikit-learn库划分数据集7、使用scikit-learn库对鸢尾花数据集进行分类 1、KNN算法简介 KNN (K-Nearest Neighbor) 最邻近分类算法&#…

QT - 日志:qDebug/qInfo/qWarning/qCritical

篇一、日志打印函数 头文件&#xff1a; #include <QDebug> 代码&#xff1a;qDebug()<<"hello world!"; 其他打印级别&#xff1a; qInfo(): 普通信息 qDebug(): 调试信息 qWarning(): 警告信息 qCritical(): 严重错误 qFatal(): 致命错误 1. qDebug…

软件工程知识体系 Chapter3 软件构造

介绍 软件构造一词指的是通过编码、验证、单元测试、集成测试和调试等组合详细创建工作软件的过程。 软件构建知识领域&#xff08;KA&#xff09;与所有其他KA都有关联&#xff0c;但它与软件设计和软件测试的关联最为紧密&#xff0c;因为软件构建过程涉及重要的软件设计和…