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.mzph.cn/news/786331.shtml

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

相关文章

OSPF协议详解

静态缺点 1、中大型复杂网络----配置量大 2、不能实时收敛 动态-----可以实时收敛 IGP----内部网关路由协议 RIP OSPF EIGRP ISIS EGP----外部网关路由协议 BGP IGP (选路佳 占用资源 收敛快)----一个协议好需满足这三个 距离矢量 DV RIP…

node.js的模块化 与 CommonJS规范

一、node.js的模块化 (1)什么是模块化? 将一个复杂的程序文件依据一定的规则拆分成为多个文件的过程就是模块化 在node.js中,模块化是指把一个大文件拆分成独立并且相互依赖的多个小模块,将每个js文件被认为单独的一个模块;模块…

HDLbits 刷题 -- Alwaysblock2

学习: For hardware synthesis, there are two types of always blocks that are relevant: Combinational: always (*)Clocked: always (posedge clk) Clocked always blocks create a blob of combinational logic just like combinational always blocks, but…

基于ArgoCD和Testkube打造GitOps驱动的Kubernetes测试环境

本文介绍了一项新工具,可以基于Gitops手动或者自动实现Kubernetes集群应用测试,确保集群的健康状态与Git仓库定义的一致。原文: GitOps-Powered Kubernetes Testing Machine: ArgoCD Testkube 简介:GitOps 云原生测试面临的挑战 现代云原生应…

[蓝桥杯 2014 省 A] 波动数列

容我菜菲说一句,全网前排题解都是rubbish,当然洛谷某些也是litter 不好意思,最近背单词背了很多垃圾的英文,正题开始 [蓝桥杯 2014 省 A] 波动数列 题目描述 输入格式 输入的第一行包含四个整数 n , s , a , b n,s,a,b n,s,a…

iPhone设备中定位应用程序崩溃问题的日志分析技巧

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么? 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志,以便调查崩溃的原因。我们将展示三种不同的…

蓝桥杯刷题day13——玩游戏【算法赛】

一、问题描述 小 A 和小 B 两个人在海边找到了 n 个石子,准备开始进行一些游戏,具体规则如下:小 B 首先将 n 个石子分成若干堆,接下来从小 A 开始小 A 和小 B 轮流取石子,每次可以任选一堆石子取走任意个,…

Linux中JMeter的使用

Linux中JMeter的使用 Linux版本JMeter安装 # 1、下载、安装JMeter 如果有安装包直接上传即可 wget -c https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.1.tgz # 解压 tar -zxvf apache-jmeter-5.4.1.tgz -C /usr/local/sjdwz_test cd /usr/local/sjdwz_t…

数据分析之Tebleau可视化:折线图、饼图、环形图

1.折线图的绘制 方法一: 拖入订单日期和销售金额,自动生成一个折线图 方法二: 选中订单日期和销售金额(摁住ctrl可以选择多个纬度) 点击右边的智能推荐,选择折线图 2.双线图的绘制、双轴的设置 方法一&…

【Jmeter+Influxdb+Grafana性能监控平台安装与部署】

JmeterInfluxdbGrafana性能监控平台安装与部署 前言Influxdb安装与连接Jmeternfluxdb下载(winodws)Grafana安装与配置 前言 我们在性能测试过程中,在需要较大并发时,为了尽量避免使用GUI界面来节省资源,通常使用命令行…

python+vue访客预约登记系统-数据可视化echart大屏

为了系统的完整,必须要有可行性分析的,系统的可行性关系到生存问题,分析其意义可否利用本系统来弥补线下管理模式中的不足之处等,通过本系统来减少工作量,使管理者与用户的工作和管理效率更高。对此体现出更多的意义和…

基于深度学习的端到端自动驾驶的最新进展:调研综述

基于深度学习的端到端自动驾驶的最新进展:调研综述 附赠自动驾驶学习资料和量产经验:链接 论文链接:https://arxiv.org/pdf/2307.04370.pdf 调研链接:https://github.com/Pranav-chib/ 摘要 本文介绍了基于深度学习的端到端自…

一次生产docker MTU=1500问题排查解决

和业务方进行联调,业务方调用我方服务, 我方服务部署在虚拟机的docker容器中 提供grpc服务, 通过公网vip lvs到宿主机端口 联调发现 ping 和 telnet我方端口都正常, 但是通过grpc协议调用不通,一直超时 在容器上和lv…

构建安全高效的用户登录系统:登录流程设计与Token验证详解

在当今数字化时代,用户登录系统是几乎所有在线服务的基础。然而,随着网络安全威胁的不断增加,设计一个安全可靠的登录系统变得至关重要。本文将深入探讨用户登录流程的设计原则以及Token验证的实现方式,带您了解如何构建安全高效的…

基于DCT和扩频的音频水印嵌入提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................................................................... N 10; %嵌入一…

RTOS中临界区嵌套保护的实现原理(基于RT-Thread)

0 前言 什么是临界区(临界段)? 裸机编程中由于不涉及线程和线程切换,因此没有临界区这一个概念。在RTOS中由于存在线程切换等场景,便有了临界区这个概念。简单来说,临界区就是不允许被中断的代码区域。什么…

在 Three.js 中,`USDZExporter` 类用于将场景导出为 USDZ 格式,这是一种用于在 iOS 平台上显示增强现实(AR)内容的格式。

demo 案例 在 Three.js 中,USDZExporter 类用于将场景导出为 USDZ 格式,这是一种用于在 iOS 平台上显示增强现实(AR)内容的格式。下面是关于 USDZExporter 的入参、出参、方法和属性的讲解: 入参 (Parameters): sc…

HTTP和HTTPS谁传输数据更安全?

1.HTTP HTTP在传输数据时,通常都是明文传输,也就是传输的数据没有进行加密。在这种情况下,如果传输的是一些敏感数据,比如某银行卡密码,就很容易被别人截获到,这就对我们的个人利益产生了威胁。 HTTP传输数…

Mysql数据库故障排查与优化

目录 前言 一、Mysql数据库的单实例故障 1.故障一——拒绝连接数据库 1.1故障内容 1.2问题分析 1.3解决方法 2.故障二——密码错误 2.1故障内容 2.2问题分析 2.3解决方法 3.故障三——数据库处理较慢 3.1故障内容 3.2问题分析 3.3解决方法 4.故障四——数据库表…

k8s 基础入门

1.namespace k8s中的namespace和docker中namespace是两码事,可以理解为k8s中的namespace是为了多租户,dockers中的namespace是为了网络、资源等隔离 2.deployment kubectl create #新建 kubectl aply #新建 更新 升级: 滚动升级&#x…