PySimpleGUI:简化 Python 中的 GUI 开发

作为一个算法工程师,避免不了需要标注数据(当然还有其他需求),标注数据时还是需要一个很好的工具,此时需要你来写一个图形用户界面(GUI),太难了~

然而,PySimpleGUI 正以其简单易用的 GUI 创建方法改变这一现状。本文中,云朵君将和大家一起学习 PySimpleGUI 的核心方面,包括了解核心功能和创建 GUI,一起掌握其功能并学习如何有效地使用它。

图片

概述
  1. 了解 PySimpleGUI。

  2. 在你的开发环境中设置并安装 PySimpleGUI。

  3. 使用 PySimpleGUI 创建基本 GUI。

  4. 掌握 PySimpleGUI 的关键组件和概念。

  5. 学习一个应用案例:将 Matplotlib 与 PySimpleGUI 集成

简单GUI

PySimpleGUI 通过将 Tkinter、Qt、WxPython 和 Remi 等各种框架集成到统一的 API 中,增强了 Python 的 GUI 开发可访问性。它大大简化了界面创建,使开发人员能够以最少的编码工作量轻松构建功能性 GUI。

以下是 PySimpleGUI 的主要功能:
  • 跨平台兼容性:它可在 Windows、macOS 和 Linux 等各种操作系统上无缝运行。

  • 易于使用:它提供了一个易于使用的简单界面

  • 集成灵活性:它可以与不同的 GUI 框架顺利集成,使开发人员能够为他们的项目选择最合适的框架。

  • Swift 应用程序构建:其简化的语法和抽象层使得快速创建强大的 GUI 成为可能,从而促进高效的开发流程。

核心方法和函数

以下是核心方法和功能:

  1. sg.Window(title, layout, …)

    • 创建具有指定 title 和 layout 的新窗口。

    • layout使用 PySimpleGUI 元素定义 GUI 的结构。

  2. sg.Text(text, …)

    • 在 GUI 中显示静态文本。

    • text是要显示的文本。

  3. sg.InputText(default_text, …)

    • 创建单行输入字段。

    • default_text设置初始文本。

  4. sg.Button(button_text, …)

    • 创建一个可点击的按钮。

    • button_text是按钮上显示的文本。

  5. sg.Submit()

    • 用于提交或取消表单的预定义按钮。

  6. sg.Popup(title, message, …)

    • 显示带有 title 和 message 的弹出窗口。

布局元素:
  • 布局

    • 定义 GUI 结构的列表,包含TextInputTextButton等元素。

事件循环函数:
  • sg.read()

    • 从 GUI 读取事件和值。

    • 返回一个元组(event, values),其中 event 表示被点击的按钮或触发的事件,并且values是输入字段值的字典。

  • sg.Window.close()

    • 关闭窗口。

PySimpleGUI 入门

安装:使用 pip 安装 PySimpleGUI

创建基本窗口

这是一个创建带有按钮的窗口的简单示例:

图片

简单GUI

图片

简单GUI

了解布局

布局是列表的列表,其中每个内部列表代表窗口中的一行元素。诸如sg.Textsg.Button等元素用于定义 GUI 的组件。

高级功能

以下是高级功能:

  • 主题:使用内置主题自定义应用程序的外观。sg.theme('DarkAmber')

  • 数据完整性:轻松实施强大的输入验证,以保障用户数据完整性。

  • 并发操作:它促进多线程,后台进程可以并发执行,同时保持 GUI 响应能力。

  • 库兼容性:将 PySimpleGUI 与外部库(如用于可视化的 Matplotlib、用于图像分析的OpenCV等)无缝集成。

最佳实践

  • 模块化设计:将你的 GUI 分解为更小、更易于管理的组件。

  • 事件循环:确保你的事件循环高效并适当地处理事件。

  • 错误处理:实现错误处理以使你的应用程序更加可靠。

如果你需要更高级的功能,推荐访问:https://www.pysimplegui.com/gallery

将 Matplotlib 与 PySimpleGUI 集成

下面我们一起学习一个实用案例。

创建图表是与同事共享信息的好方法。Python 最流行的绘图包之一是Matplotlib。Matplotlib 可以创建各种不同的图表。

Matplotlib 可以与 PySimpleGUI 集成,因此如果您已经知道如何使用 Matplotlib,可以相当轻松地将图形添加到 GUI。

现在可以创建一个新文件并将其命名为psg_matplotlib.py

演示代码有点长,因此可以分部分添加代码,从以下开始:

这些是使代码正常运行所需的导入。这段代码还设置了 Matplotlib Figure() 并使用 add_subplot() 添加了一个绘图。PySimpleGUIQt 移植目前还不能以同样的方式工作,但我们正在为将来的版本做准备。

在 PySimpleGUI 和 Tkinter 中,可以使用元素Canvas()进行绘图。

现在,可以创建一个辅助函数来在 PySimpleGUI 上绘制图形Canvas()辅助函数是重复的代码,不想多次编写。看一看:

将使用figure_canvas_agg.draw()它来绘制 PySimpleGUI 元素的图表Canvas()

要使用 PySimpleGUI 的 Canvas(),您需要将它与 Matplotlib 图形对象一起传入 FigureCanvasTkAgg()。FigureCanvasTkAgg() 来自 Matplotlib,被 Tkinter 用于在 PySimpleGUI 中嵌入绘图。如果您使用的是 PySimpleGUIQt,效果会有所不同。

最后一步是使用 PySimpleGUI 编写用户界面:

要创建用户界面,只需要一个Text()元素、一个Canvas()元素和一个Button()元素。然后,将所有这些添加到Window()并调用draw_figure()辅助函数来绘制图表。

这里不需要事件循环,因为您不会与此用户界面中的元素进行交互。

该图表如下所示:

图片

PySimpleGUI 与 Matplotlib Graph

写在最后

PySimpleGUI 简化了 GUI 开发;对于各个技能水平的开发人员来说,它都是一款出色的工具。它简化了创建图形界面的过程,帮助你制作功能齐全且外观美观的应用程序。消除了传统 GUI 框架的复杂性,你可以专注于轻松交付高效的Python应用程序。

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

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

相关文章

Java语言程序设计基础篇_编程练习题**18.34 (游戏:八皇后问题)

目录 题目:**18.34 (游戏:八皇后问题) 代码示例 代码解析 输出结果 使用文件 题目:**18.34 (游戏:八皇后问题) 八皇后问题是要找到一个解决方案,将一个皇后棋子放到棋盘上的每行中,并且两个皇后棋子之间不能相互攻击。编写个…

B-树(不是B减树)原理剖析(1)

目录 B树的主要特性: B树的操作: B树的优点: 为什么要发明出B-树? B树的概念和原理剖析 原理图讲解(部分讲解在图中) 初始化结点: 处理数据数量计算(了解) 底层代码实现(加深理解) 前些日子我们学了AVl树&…

MySQL InnoDB undo log生成逻辑分析

引用《InnoDB存储引擎》中有一句话,特别重要: 用户通常对undo有这样的误解:undo用于将数据库物理地恢复到执行语句或事务之前的样子---但事实并非如此。 undo是逻辑日志,因此只是将数据库逻辑地恢复到原来的样子。所有的修改都被…

通信工程学习:什么是NFV网络功能虚拟化

NFV:网络功能虚拟化 NFV(Network Function Virtualization),即网络功能虚拟化,是一种通过虚拟化技术实现网络功能的技术手段。它借鉴了x86服务器的架构,将传统的网络硬件设备如路由器、交换机、防火墙、负载…

neo4j:ubuntu环境下的安装与使用

一、neo4j安装 1. 下载安装包 进入网站:https://neo4j.com/deployment-center/#community 在上图中选择下载即可(社区版免费) 注意:neo4j的版本要和电脑安装的jdk版本对应,jdk版本使用java --version查看:…

华为认证HCIA篇--网络通信基础

大家好呀!我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分,偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过,如果是新手或小白的话建议还是看一看,先有个印象,好为后续的…

复制他人 CSDN 文章到自己的博客

文章目录 0.前言步骤 0.前言 在复制别人文章发布时,记得表明转载哦 步骤 在需要复制的csdn 文章页面,打开浏览器开发者工具(F12)Ctrl F 查找"article_content"标签头 右键“Copy”->“Copy element”新建一个 tx…

【Godot4自学手册】第四十八节创建雨粒子效果

今天我们要利用GPU粒子节点玩雨粒子效果,下雨天。 一、添加GPU粒子系统 添加GPUParticles2D节点。选择根节点,单击添加按钮,选择GPUParticles2D,完成添加。 二、修改属性 1.设置粒子数量。 在GPUParticles2D检查器中将Amount设…

速记篇 |TCP/IP五层模型怎么背,OSI七层模型怎么背?

背景 记忆TCP/IP五层模型和OSI七层模型可以通过理解每一层的功能、作用以及它们之间的逻辑关系来进行。下面分别给出这两个模型的记忆方法和要点: TCP/IP五层模型 TCP/IP五层模型是一个简化的模型,从下到上依次为: 1.物理层(Physi…

计算机毕业设计之:云中e百货微信小程序设计与实现(源码+文档+定制)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

微信小程序转化为uni-app项目

前言: 之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的动态tab和swiper切换的功能,但是由于自己前端抠脚的原因没有写出来,然后自己在网上搜索的时候发现了有个微信小程序里面的页面及极其的符合我的需求。那么问题来了我该如何…

『功能项目』QFrameWork拾取道具UGUI【69】

本章项目成果展示 我们打开上一篇68QFrameWork扔到地上UGUI的项目, 本章要做的事情是实现当物品在地上时,点击物品将对应物品转移到道具栏中 制作一个提示UI界面 添加Button组件设置为点击即将父物体隐藏 拖拽到文件夹中在场景中删除 创建脚本&#xf…

springboot实战学习(9)(配置mybatis“驼峰命名“和“下划线命名“自动转换)(postman接口测试统一添加请求头)(获取用户详细信息接口)

接着学习。之前的博客的进度:完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌"的组成与使用以及完成了"登录认证"(生成与验证JWT令牌)具体往回看了解的链接…

python虚拟环境创建使用

环境变量中配置 vi /etc/profile 注意安装完python环境之后要添加以下代码,配置虚拟环境的命令才能正确使用: PATH$PATH:/usr/local/python3 PATH$PATH:/usr/local/python3/bin 创建:virtualenv venv 激活虚拟环境:source ./v…

从预测性维护到智能物流:ARM边缘计算控制器的工业实践

工业4.0时代的到来,边缘计算技术成为连接物理世界与数字世界的桥梁。ARM架构的边缘计算控制器凭借其低功耗、高能效和灵活性等特点,在工业自动化领域展现出巨大潜力。本文将通过几个实际应用案例来探讨ARM边缘计算控制器是如何提升生产线效率和安全性的&…

【数据结构之线性表】有序表的合并(链表篇)

链表有序表的合并 思路图 将链表L1和L2按照顺序合并到L3中(注:三个链表都是带头结点的) A、要实现有序合并,必须先比较L1,L2两表中结点的大小,这里我们暂时先不讨论,直接根据图中来进行思路整理&#xff…

plt常用函数介绍二

目录 fig.add_subplot()ax.set()plt.legend()plt.subplots_adjust()plt.suptitle()plt.grid() fig.add_subplot() fig.add_subplot() 是 Matplotlib 中 Figure 对象的方法,用于在图形中添加子图(subplot)。 其语法为: subplot(…

linux网络编程8

24.9.25学习目录 一.原始套接字(续)1.sendto发送数据原始套接字1.ARP 二.Web编程1.概述2.HTML 一.原始套接字(续) 混杂模式: 指一台机器的网卡能够接受所有经过它的数据包,不论其目的地址是否是它&#xf…

程序人生:软件测试 非技术性面试题【建议每个测试人观看】

1、自我介绍:三分钟左右 2、为什么从郑州/太原离职? 3、你的职业规划是什么样的? 4、对下一家公司有什么自己的想法吗? 5、你觉得作为一名测试工程师,应该具备什么样的素养? 6、你觉得管理层&#xff…

echart实现渐变色-vue2

let selectData5 [{name: "有功电量",type: "bar",data: data.data.historyKwhList,unit: "MW",itemStyle: {// 使用渐变色color: {type: "linear",x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: "#04C886",},{of…