python库介绍-PySimpleGUI-简单的GUI开发工具

简介: 创建图形用户界面(GUI graphical user interface) 可能很困难。有许多不同的Python GUI工具包可供选择。 比如Tkinter,wxPython和PyQt(或PySide2) 。

创建图形用户界面(GUI graphical user interface) 可能很困难。有许多不同的Python GUI工具包可供选择。 比如Tkinter,wxPython和PyQt(或PySide2) 。但实际上PySimpleGUI创建GUI更加容易。

PySimpleGUI基于Tkinter,Remi、wxPython和PyQt。Remi将应用程序的界面转换为HTML以在Web浏览器中呈现”。

PySimpleGUI不需要使用类来创建用户界面。

Hello PySimpleGUI

在使用GUI时,总是很容易了解如何将自己组合在一起。让我们编写一个包含字符串和两个按钮的小表格:“确定”按钮和“取消”按钮

# -*- coding: utf-8 -*-
import PySimpleGUI as sg
 
# Create some widgets
text = sg.Text("What's your name?")
text_entry = sg.InputText()
ok_btn = sg.Button('OK')
cancel_btn = sg.Button('Cancel')
layout = [[text, text_entry],
          [ok_btn, cancel_btn]]
 
# Create the Window
window = sg.Window('Hello PySimpleGUI', layout)
 
# Create the event loop
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):
        # User closed the Window or hit the Cancel button
        break
    print(f'Event: {event}')
    print(str(values))
 
window.close()

在这里导入PySimpleGUI,然后创建一系列小部件:Text,InputText和两个Button。要按行布局小部件,可以将它们添加到列表中。因此,对于小部件的第一行,您将创建一个包含Text小部件和InputText小部件的列表。这些小部件是从左到右水平添加的。要添加第二行,请添加第二个小部件列表,其中包含两个按钮。

将所有小部件放在一组嵌套列表中后,即可创建窗口。这是包含所有其他小部件的父小部件。它具有标题,并接受您的小部件嵌套列表。

最后,您创建一个while循环,并调用Window的 read()方法以提取用户设置的事件和值。如果用户按下“取消”按钮或关闭“窗口”,则您会发现并退出循环。否则,您将输出事件和用户输入的任何值。

这是您运行代码时GUI的外观:

image

在文本输入小部件中输入字符串“ mike”,然后点击“确定”按钮。您应该在终端中看到以下输出:

Event: OK
{0: 'mike'}

但是,如果您可以将stdout重定向到GUI中的调试窗口,那会不会很好? PySimpleGUI实际上有一个简单的方法可以做到这一点。您需要做的就是将上面代码中的打印语句更新为以下内容:

image

PySimpleGUI Widget

文档 https://pysimplegui.readthedocs.io/en/latest/#element-and-function-call-reference。注意Table Widget暂时还有些问题。

如果PySimpleGUI背后的开发人员可以包装wxPython的小部件或Qt,因为它们都具有健壮的表和树小部件,那么这样做应该会更好。

多个窗口

我看到许多新程序员都在挣扎的一件事是在他们选择的GUI工具包中打开多个窗口。 幸运的是,PySimpleGUI明确标明了如何执行此操作的说明。 实际上,他们有两种不同的“设计模式”来做这种事情。

为简便起见,我将仅展示如何执行两个活动窗口:

# -*- coding: utf-8 -*-
# https://www.jianshu.com/u/69f40328d4f0
# https://github.com/china-testing/python-api-tesing
# https://china-testing.github.io/
# support q group: 630011153 144081101
import PySimpleGUI as sg
 
# Create some widgets
ok_btn = sg.Button('Open Second Window')
cancel_btn = sg.Button('Cancel')
layout = [[ok_btn, cancel_btn]]
 
# Create the first Window
window = sg.Window('Window 1', layout)
 
win2_active = False
 
# Create the event loop
while True:
    event1, values1 = window.read(timeout=100)
 
    if event1 in (None, 'Cancel'):
        # User closed the Window or hit the Cancel button
        break
 
    if not win2_active and event1 == 'Open Second Window':
        win2_active = True
        layout2 = [[sg.Text('Window 2')],
                   [sg.Button('Exit')]]
 
        window2 = sg.Window('Window 2', layout2)
 
    if win2_active:
        events2, values2 = window2.Read(timeout=100)
        if events2 is None or events2 == 'Exit':
            win2_active  = False
            window2.close()
 
window.close()

小结

PySimpleGUI是一个简洁的库,我喜欢它比wxPython和PyQt趋向于变得更“ Pythonic”。当然,如果您寻找一种使用Python方法而不是C ++方法的GUI,则可能需要查看Toga或Kivy。

无论如何,我认为PySimpleGUI看起来具有很多有趣的功能。小部件集开箱即用,但是当它们包装其他工具箱时,这将不再是问题。坦白说,他们在Github上有很多很棒的演示应用程序,还有项目本身的演示应用程序。他们还提供了有关使用PyInstaller将您的应用程序转换为Windows和Mac上的可执行文件的信息,这通常是您在GUI工具包的文档中看不到的。

相关文章
|
13天前
|
存储 缓存 JavaScript
python实战篇:利用request库打造自己的翻译接口
python实战篇:利用request库打造自己的翻译接口
26 1
python实战篇:利用request库打造自己的翻译接口
|
2天前
|
机器学习/深度学习 算法 搜索推荐
SciPy线性代数库详解:矩阵运算与方程求解
【4月更文挑战第17天】SciPy的`scipy.linalg`模块提供丰富的线性代数功能,包括矩阵运算、线性方程组求解、特征值问题和奇异值分解等,基于BLAS和LAPACK库确保效率与稳定性。关键操作如矩阵乘法使用`dot`函数,转置和共轭转置用`transpose`和`conj`,求解线性方程组有`solve`和迭代方法,计算特征值和向量用`eig`,奇异值分解则依赖`svd`。这个库对科学计算、数据分析和机器学习等领域至关重要。
|
2天前
|
算法 Serverless 计算机视觉
SciPy的科学计算库的基础知识与应用
【4月更文挑战第17天】**SciPy**是Python的开源科学计算库,基于NumPy,包含优化、积分、线性代数、信号处理等模块。本文介绍了SciPy的基本使用,如线性代数(矩阵运算、特征值)、优化(最小化问题)、积分以及信号处理(滤波)。安装SciPy可使用`pip install scipy`。此外,还展示了图像处理和常微分方程求解的例子。SciPy是科学计算的重要工具,适用于各种数值问题。参考文献包括SciPy和NumPy官方文档。
|
3天前
|
JSON API 数据格式
python的request库如何拿到json的返回值
python的request库如何拿到json的返回值
7 0
|
7天前
|
数据采集 JSON 网络协议
「Python系列」Python urllib库(操作网页URL对网页的内容进行抓取处理)
`urllib` 是 Python 的一个标准库,用于打开和读取 URLs。它提供了一组模块,允许你以编程方式从网络获取数据,如网页内容、文件等。
29 0
|
7天前
|
开发者 Python
Python中使用`requests`库进行文件上传与下载的技术详解
【4月更文挑战第12天】在Python的网络编程中,文件上传和下载是常见的需求。`requests`库作为一个强大且易用的HTTP客户端,为我们提供了简便的文件上传和下载功能。本文将详细介绍如何在Python中使用`requests`库进行文件上传和下载。
|
7天前
|
安全 API 开发者
Python中使用`requests`库进行请求头与自定义参数设置的技术详解
【4月更文挑战第12天】在Python中,`requests`库是一个强大且灵活的HTTP客户端,用于发送所有类型的HTTP请求。在发送请求时,我们经常需要设置请求头和自定义参数来满足不同的需求。本文将详细探讨如何在Python中使用`requests`库进行请求头和自定义参数的设置。
|
10天前
|
数据采集 自然语言处理 搜索推荐
一篇博客带你领略学习Python的第三方库---如何获取和安装第三方库,关于三种常见第三方库的下载和讲解(pyinstall库,jieba库,wordcloud库),更多第三方库的分类介绍
一篇博客带你领略学习Python的第三方库---如何获取和安装第三方库,关于三种常见第三方库的下载和讲解(pyinstall库,jieba库,wordcloud库),更多第三方库的分类介绍
|
15天前
|
数据采集 网络协议 API
python中其他网络相关的模块和库简介
【4月更文挑战第4天】Python网络编程有多个流行模块和库,如requests提供简洁的HTTP客户端API,支持多种HTTP方法和自动处理复杂功能;Scrapy是高效的网络爬虫框架,适用于数据挖掘和自动化测试;aiohttp基于asyncio的异步HTTP库,用于构建高性能Web应用;Twisted是事件驱动的网络引擎,支持多种协议和异步编程;Flask和Django分别是轻量级和全栈Web框架,方便构建不同规模的Web应用。这些工具使网络编程更简单和高效。
|
18天前
|
Python
python使用tkinter库,封装操作excel为GUI程序
python使用tkinter库,封装操作excel为GUI程序