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工具包的文档中看不到的。

相关文章
|
7天前
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
36 0
|
7天前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
21 0
|
2天前
|
调度 开发者 网络架构
探索Python中的异步编程:深入理解asyncio库
【9月更文挑战第32天】在现代软件开发中,异步编程已成为提升性能和响应性的关键策略之一。本文将深入探讨Python的asyncio库,一个强大的异步I/O框架,它允许开发者编写单线程并发代码,同时处理多个任务而无需复杂的多线程或多进程编程。通过本文,你将学习到如何利用asyncio来构建高效、可扩展的应用程序,并了解其背后的原理和设计哲学。
7 2
|
5天前
|
数据挖掘 Python
【Python】应用:pyproj地理计算库应用
这篇博客介绍了 `pyproj` 地理计算库的应用,涵盖地理坐标系统转换与地图投影。通过示例代码展示了如何进行经纬度与UTM坐标的互转,并利用 `pyproj.Geod` 计算两点间的距离及方位角,助力地理数据分析。 安装 `pyproj`:`pip install pyproj`。更多内容欢迎关注本博客,一起学习进步! Pancake 🍰 不迷路。😉*★,°*:.☆( ̄▽ ̄)/$:*.°★* 😏
10 1
|
6天前
|
数据挖掘 API 数据处理
Python 数据分析及预处理常用库
Python自身数据分析功能有限,需借助第三方库增强。常用库包括NumPy、pandas、Matplotlib等。NumPy由Numeric发展而来,提供了多维数组对象及各种API,支持高效的数据处理,如数学、逻辑运算等,常作为其他高级库如pandas和Matplotlib的依赖库。其内置函数处理速度极快,建议优先使用以提升程序效率。
7 0
|
6天前
|
UED Python
Python requests库下载文件时展示进度条的实现方法
以上就是使用Python `requests`库下载文件时展示进度条的一种实现方法,它不仅简洁易懂,而且在实际应用中非常实用。
18 0
|
7天前
|
机器学习/深度学习 人工智能 数据可视化
# Python的一个非常cool的库Gradio
# Python的一个非常cool的库Gradio
20 0
|
7天前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
17 0
|
7天前
|
数据挖掘 Python
​Python神奇之旅:探索NumPy库的力量
​Python神奇之旅:探索NumPy库的力量
12 0
|
7天前
|
Python
python一键导出/导入pip库
python一键导出/导入pip库
11 0
下一篇
无影云桌面