使用 PySimpleGUI 轻松将 GUI 添加到您的程序和脚本中
很少有人通过双击 .py 文件来运行 Python 程序,就像它是一个 .exe 文件一样。当一个典型的用户(非程序员类型)双击一个 .exe 文件时,他们希望它弹出一个可以与之交互的窗口。虽然使用 tkinter 的 GUI 可以使用标准的 Python 安装,但许多程序不太可能这样做。 如果将 Python 程序打开到 GUI 中如此简单,以至于初学者都可以做到呢?有人会在意吗?有人会用吗?很
很少有人通过双击 .py 文件来运行 Python 程序,就像它是一个 .exe 文件一样。当一个典型的用户(非程序员类型)双击一个 .exe 文件时,他们希望它弹出一个可以与之交互的窗口。虽然使用 tkinter 的 GUI 可以使用标准的 Python 安装,但许多程序不太可能这样做。
如果将 Python 程序打开到 GUI 中如此简单,以至于初学者都可以做到呢?有人会在意吗?有人会用吗?很难回答,因为迄今为止构建自定义 GUI 并不容易。
将 GUI 添加到 Python 程序/脚本的能力似乎存在差距。完全的初学者只使用命令行,许多高级程序员不想花时间编写 tkinter GUI。
图形用户界面框架
Python 不乏 GUI 框架。 Tkinter、WxPython、Qt 和 Kivy 是一些主要的软件包。此外,还有很多简化的 GUI 包“包装”了主要包之一,包括 EasyGUI、PyGUI 和 Pyforms。
问题是初学者(那些经验不到六周的人)甚至无法学习最简单的主要软件包。这使得包装程序包成为一种潜在的选择,但对于大多数新用户来说,构建自定义 GUI 布局仍然很困难或不可能。即使有可能,包装器仍然需要代码页。
PySimpleGUI试图通过为易于定制的 GUI 提供超级简单、易于理解的界面来解决这些 GUI 挑战。使用 PySimpleGUI 时,即使是许多复杂的 GUI 也只需要不到 20 行代码。
秘密
PySimpleGUI 对于新手来说更胜一筹的原因在于,该软件包包含了用户通常需要编写的大部分代码。按钮回调由 PySimpleGUI 处理,而不是用户的代码。初学者很难掌握函数的概念,并期望他们在最初的几周内理解回调函数是一种延伸。
对于大多数 GUI,安排 GUI 小部件通常需要几行代码......每个小部件至少一两行。 PySimpleGUI 使用自动创建布局的“自动打包器”。不需要包或网格系统来布置 GUI 窗口。
最后,PySimpleGUI 以巧妙的方式利用 Python 语言结构,缩短了代码量并以直接的方式返回 GUI 数据。当在表单布局中创建一个小部件时,它是就地配置的,而不是几行代码。
什么是图形用户界面?
大多数 GUI 只做一件事:从用户那里收集信息并将其返回。从程序员的角度来看,这可以概括为如下所示的函数调用:
button, values = GUI_Display(gui_layout)
大多数 GUI 所期望的是被单击的按钮(例如,确定、取消、保存、是、否等)和用户输入的值。 GUI 的本质可以归结为一行代码。
这正是 PySimpleGUI 的工作原理(对于简单的 GUI)。当调用显示 GUI 时,在单击关闭表单的按钮之前不会执行任何操作。
还有更复杂的 GUI,例如单击按钮后不关闭的 GUI。示例包括机器人的远程控制界面和聊天窗口。这些复杂的表单也可以使用 PySimpleGUI 创建。
快速制作GUI
PySimpleGUI 什么时候有用?立即,只要您需要一个 GUI。创建和试用 GUI 只需不到五分钟。制作 GUI 的最快方法是从PySimpleGUI Cookbook复制一个。按着这些次序:
-
找一个和你想创建的类似的GUI
-
从 Cookbook 复制代码
-
将其粘贴到您的 IDE 中并运行它
让我们看一下书中的第一个食谱。
将 PySimpleGUI 导入为 sg
非常基本的形式。以列表形式返回值
form u003d sg.FlexForm('Simple data entry form') #以空白表格开头
布局u003d \ [
[sg.Text('请输入您的姓名、地址、电话')],
[sg.Text('Name', sizeu003d(15, 1)), sg.InputText('name')],
[sg.Text('地址', sizeu003d(15, 1)), sg.InputText('地址')],
[sg.Text('Phone', sizeu003d(15, 1)), sg.InputText('phone')],
[sg.Submit(), sg.Cancel()]
]
按钮,值 u003d form.LayoutAndRead(layout)
打印(按钮,值[0],值[1],值[2])
这是一个大小合适的表格。
如果您只需要收集一些值并且它们基本上都是字符串,则可以复制此配方并对其进行修改以满足您的需要。
您甚至可以仅用五行代码创建自定义 GUI 布局。
将 PySimpleGUI 导入为 sg
form u003d sg.FlexForm('我的第一个 GUI')
layout u003d [ [sg.Text('输入你的名字'), sg.InputText()],
[sg.OK()] ]
按钮,(名称,)u003d form.LayoutAndRead(布局)
五分钟制作自定义GUI
如果您有一个简单的布局,您应该能够通过修改 Cookbook 中的代码在不到五分钟的时间内在 PySimpleGUI 中创建自定义布局。
小部件在 PySimpleGUI 中称为元素。这些元素的拼写与您在 Python 代码中键入它们的方式完全相同。
核心要素
文本
输入文本
多行
输入组合
列表框
收音机
复选框
旋转
输出
简单按钮
实时按钮
读取表单按钮
进度条
图片
滑块
柱子
快捷方式列表
PySimpleGUI 也有两种类型的元素快捷方式。一种类型是完全相同元素的其他名称(例如,T
而不是Text
)。第二种类型使用特定设置配置元素,使您无需指定所有参数(例如,Submit
是一个带有文本“提交”的按钮)
T u003d 文本
文本 u003d 文本
在 u003d 输入文本
输入 u003d 输入文本
组合 u003d 输入组合
下拉 u003d 输入组合
Drop u003d InputCombo
按钮快捷键
许多常用按钮已实现为快捷方式。这些包括:
文件夹浏览
文件浏览
文件另存为
节省
提交
好的
好的
取消
退出
出口
是的
不
还有更多通用按钮功能的快捷方式。
简单按钮
读取表单按钮
实时按钮
这些是您可以在 PySimpleGUI 中选择的所有 GUI 小部件。如果一个不在这些列表中,它就不会出现在您的表单布局中。
GUI设计模式
编程和开发
-
红帽开发者博客
-
编程备忘单
-
免费试用:红帽学习订阅
-
电子书:Bash 编程简介
-
Bash Shell 脚本备忘单
-
电子书:企业 Java 现代化
在 GUI 中往往不会改变的东西是设置和显示窗口的调用。元素的布局是从一个程序到另一个程序的变化。
这是上面示例中删除了布局的代码:
将 PySimpleGUI 导入为 sg
form u003d sg.FlexForm('简单的数据输入表格')
在这里定义你的表单(它是一个列表的列表)
按钮,值 u003d form.LayoutAndRead(layout)
大多数 GUI 的流程是:
-
创建表单对象
-
将GUI定义为列表列表
-
显示GUI并获得结果
这些是您在 PySimpleGUI 设计模式中看到的逐行显示。
图形界面布局
要创建自定义 GUI,首先将表单分解为行,因为表单一次定义为一行。然后一个接一个地放置一个元素,从左到右工作。
结果是一个看起来像这样的“列表列表”:
布局 u003d [ [文本('第 1 行')],
[文本('Row 2'), Checkbox('Checkbox 1', OK()), Checkbox('Checkbox 2'), OK()] ]
此布局生成此窗口:
显示图形用户界面
完成布局并复制设置和显示表单的代码行后,就可以显示表单并从用户那里获取值了。
这是显示表单并提供结果的代码行:
button, values = form.LayoutAndRead(layout)
表单返回两个值:单击按钮的文本和用户输入表单的值列表。
如果显示示例表单并且用户除了单击_OK_按钮之外什么都不做,结果将是:
按钮 u003du003d '确定'
值 u003du003d [假,假]
复选框元素返回 True 或 False 值。因为复选框默认为未选中,所以返回的两个值都是 False。
显示结果
从 GUI 获得值后,最好检查变量中的值。与其使用print
语句将它们打印出来,不如坚持使用 GUI 的思想并将数据输出到窗口。
PySimpleGUI 有许多消息框可供选择。传递给消息框的数据显示在一个窗口中。该函数接受任意数量的参数。您可以简单地指出您想在调用中看到的所有变量。
PySimpleGUI 中最常用的消息框是 MsgBox。要显示上一个示例的结果,请编写:
祖兹100093
放在一起
现在您已经了解了基础知识,让我们组合一个包含尽可能多的 PySimpleGUI 元素的表单。此外,为了给它一个漂亮的外观,我们会将“外观和感觉”更改为绿色和棕褐色配色方案。
将 PySimpleGUI 导入为 sg
sg.ChangeLookAndFeel('GreenTan')
form u003d sg.FlexForm('Everything bagel', default\element\sizeu003d(40, 1))
column1 u003d [[sg.Text('Column 1', background_coloru003d'#d3dfda', justificationu003d'center', sizeu003d(10,1))],
[sg.Spin(valuesu003d('Spin Box 1', '2', '3'), initial_valueu003d'Spin Box 1')],
[sg.Spin(valuesu003d('Spin Box 1', '2', '3'), initial_valueu003d'Spin Box 2')],
[sg.Spin(valuesu003d('Spin Box 1', '2', '3'), initial_valueu003d'Spin Box 3')]]
布局u003d \ [
[sg.Text('所有图形小部件都在一种形式中!', sizeu003d(30, 1), fontu003d("Helvetica", 25))],
[sg.Text('这里有一些文字....还有一个输入文字的地方')],
[sg.InputText('这是我的文字')],
[sg.Checkbox('我的第一个复选框!'), sg.Checkbox('我的第二个复选框!', defaultu003dTrue)],
[sg.Radio('我的第一台收音机! ', "RADIO1", defaultu003dTrue), sg.Radio('我的第二台收音机!', "RADIO1")],
[sg.Multiline(default_textu003d'如果您决定不输入任何内容,这是默认文本', sizeu003d(35, 3)),
sg.Multiline(default_textu003d'第二条多行', sizeu003d(35, 3))],
[sg.InputCombo(('Combobox 1', 'Combobox 2'), sizeu003d(20, 3)),
sg.Slider(rangeu003d(1, 100),orientationu003d'h', sizeu003d(34, 20), default_valueu003d85)],
[sg.Listbox(valuesu003d('Listbox 1', 'Listbox 2', 'Listbox 3'), sizeu003d(30, 3)),
sg.Slider(rangeu003d(1, 100),orientationu003d'v', sizeu003d(5, 20), default_valueu003d25),
sg.Slider(rangeu003d(1, 100),orientationu003d'v', sizeu003d(5, 20), default_valueu003d75),
sg.Slider(rangeu003d(1, 100),orientationu003d'v', sizeu003d(5, 20), default_valueu003d10),
sg.Column(column1, background_coloru003d'#d3dfda')],
[sg.Text('_' * 80)],
[sg.Text('选择一个文件夹', sizeu003d(35, 1))],
[sg.Text('你的文件夹', sizeu003d(15, 1), auto_size_textu003dFalse, justificationu003d'right'),
sg.InputText('默认文件夹'), sg.FolderBrowse()],
[sg.Submit(), sg.Cancel()]
]
按钮,值 u003d form.LayoutAndRead(layout)
sg.MsgBox(按钮,值)
这可能看起来像很多代码,但是尝试直接在 tkinter 中编写相同的 GUI 布局,您会很快意识到它是多么的小。
最后一行代码打开一个消息框。这是它的外观:
消息框调用的每个参数都显示在新行上。消息框中有两行文字;第二行很长,绕了很多次
花点时间将结果值与 GUI 配对,以了解如何创建和返回结果。
为您的程序或脚本添加 GUI
如果您有一个使用命令行的脚本,则不必为了添加 GUI 而放弃它。一个简单的解决方案是,如果命令行上给出的参数为零,则运行 GUI。否则,像今天一样执行命令行。
只需要这种逻辑:
如果 len(sys.argv) u003du003d 1:
从 GUI 收集参数
别的:
从 sys.argv 收集参数
让 GUI 快速启动和运行的最简单方法是复制和修改PySimpleGUI Cookbook中的一个食谱。
玩得开心!为您厌倦了手动运行的脚本增添趣味。花 5 或 10 分钟玩演示脚本。您可能会发现已经存在一个可以完全满足您需求的产品。如果没有,您会发现自己创建是_简单_。如果你真的迷路了,你只投入了10分钟。
资源
安装
PySimpleGUI 适用于所有运行 tkinter 的系统,包括 Raspberry Pi,它需要 Python 3
pip install PySimpleGUI
文档
-
手动
-
食谱
-
GitHub存储库
更多推荐
所有评论(0)