Python 2.7 版本的 PySimpleGUI - GUI SDK 于 2018 年推出 积极开发和支持。创建自定义 GUI 超级简单。Python 2.7 和 3 支持。100 个演示程序和食谱,可快速启动。广泛的文档。使用示例
项目描述
PySimpleGUI 用户手册
这本手册充满了答案,所以请从这里开始寻找答案。在 GitHub 上打开问题之前阅读/搜索此内容。
Python GUI For Humans - 将 tkinter、Qt、Remi、WxPython 转换为可移植的对人友好的 Pythonic 界面
2019 年 7 月 注意 - 此自述文件是从 GitHub 上的 PySimpleGUI.py 文件生成的。因此,某些调用或参数可能与您 pip 安装的 PySimpleGUI 不匹配。
正在寻找 GUI 包?你是....
- 希望将您的 Python 代码从命令行世界带到 GUI 的便利中?
- 坐在带有触摸屏的 Raspberry Pi上会浪费,因为您没有时间学习 GUI SDK?
- 进入机器学习并且厌倦了命令行?
- 编写了一些很酷的工具但由于公司政策无法共享的 IT 人员/gal 除非 EXE 文件?
- 想要将 Python 代码作为直接启动到 GUI 中的单个 .EXE 文件分发给 Windows 用户,就像 WinForms 应用程序一样?
- 想与你的朋友或家人分享你的程序(他们并不奇怪,他们运行 Python)
- 想要在系统托盘中运行程序?
- 想要教您的学生如何使用 GUI 编程的老师?
- 一个学生想要在你的项目中加入一个 GUI,这会让你的老师大吃一惊?
- 正在寻找“支持”并不断开发以改进它的 GUI 包?
- 渴望文档和大量示例?
不要再看了,你已经找到了你的 GUI 包。
基础知识
- 创建外观和操作与直接使用 tkinter、Qt、WxPython 和 Remi 创建的窗口相同的窗口。
- 需要 1/2 到 1/10 的代码量作为底层框架。
- 一个下午就可以学习 PySimpleGUI 包并编写您的第一个自定义 GUI。
- 学生可以在 Python 教育的第一周内开始使用。
- 没有回调函数。您不需要在代码中的
class任何地方写下这个词。 - 访问几乎所有底层 GUI 框架的小部件。
- 使用 tkinter 时同时支持 Python 2.7 和 3
- 同时支持 PySide2 和 PyQt5(有限支持)
- 只需更改 import 语句即可轻松跨 tkinter、Qt、WxPython 和 Web (Remi)
- 在 Python 中同时编写基于桌面和基于 Web 的 GUI的唯一方法
- 从无到有开发为具有 Python 友好界面的纯 Python 实现。
- 使用 WxPython 在系统托盘中运行您的程序。或者,更改导入并在 Qt 上运行它,而无需进行其他更改。
- 与 Qt 设计器一起使用
- 内置调试器
- 积极维护和增强 - 4 个端口正在进行中,全部由用户使用。
- 企业用户和家庭用户。
- 吸引 Python 新手和经验丰富的 Pythonista。
- 重点完全放在开发人员(您)身上,让他们的生活更轻松、简化和可控。
- 170 多个演示程序教您如何与许多流行的软件包集成,如 OpenCV、Matplotlib、PyGame 等。
- 200 页的文档,一本 Cookbook,使用文档字符串的内置帮助,简而言之,它有大量文档
GUI 开发不必困难或痛苦。它可以很有趣
用户对 PySimpleGUI 的评价
(这些评论都没有被征求过,也没有得到认可——除了他们收到的巨大感谢!)
“在过去的一周里,我一直在努力学习 PyQT,作为 GUI 设计的介绍以及如何将它应用到我现有的脚本中……我花了大约 30 分钟来弄清楚 PySimpleGUI 并让我的脚本使用一个图形用户界面。”
“Python 对我来说绝对是一场噩梦,我像躲避瘟疫一样避免了它。直到我看到 PysimpleGUI。”
“我很惊讶它比原始 tk/qt 直观得多。开发它的家伙在项目中也非常活跃,所以如果你遇到无法让代码做你想做的事情的情况希望您可以提出几乎可以确保获得有意义响应的错误/增强问题。”
“这个库是 Python 中最简单的 gui 编程方式!我完全爱上了它”
“哇,自述文件内容广泛而且很棒。” (经常听到对文档的热爱)
“来自 R,Python 绝对适合 GUI。PySimpleGUI 是一个梦想。”
“我已经编写 Python 程序大约 4 或 5 个月了。直到这周,我从来没有使用任何 UI 库,如 Tkinter、Qt、Kivy。我什至无法在 Tkinter 中可靠地加载窗口到制作一个加载屏幕,一个晚上用 PySimpleGUI 完成一个完整的程序。”
“我喜欢 PySimpleGUI!我一直在我的 Python 课程而不是 Tkinter 中教授它。”
从这里开始 - 带有目录的用户手册
ReadTheDocs <------ 阅读文档的最佳位置,由于 TOC,所有文档集中在一个位置,并且格式更好。从这里开始你的教育。容易记住 PySimpleGUI.org。
帮助和最新消息和发布的快速链接
主页 - 最新的自述文件和代码 - GitHub 易记:PySimpleGUI.com
YouTube 视频 - 如果您喜欢教学视频,这里有超过 15 个视频
- 5 部分系列基础知识
- 10 部分系列更详细
- 赤裸裸的真相(技术更新)
- 该频道上还有许多短视频展示了 PySimpleGUI 的使用情况
关于 PySimpleGUI 文档系统
本用户手册(也是项目的自述文件)是PySimpleGUI 编程环境的重要组成部分。
如果您是如何开发软件的专业人士或技术熟练者,那么您就会了解文档在技术开发领域中的作用。你可以跳过这一点....寻找下面的粗体“转到这里”。
RTFM 不是一个新的首字母缩略词。它可以追溯到 1979 年,即计算机时代的黎明,尤其是微处理器。关键是这不是一个新问题。这是一个非常古老的问题。
这里需要直言不讳,因为微妙的方法在过去没有奏效:
有时,您需要阅读或搜索本文档才能获得成功。
重读那句话。如果您是那种认为“在 StackOverflow 上发布而不是阅读文档更快、更容易”的人,这对您来说将是一个严重的问题。
如果您还没有成熟到能够理解该技能或选择不遵循它的程度,那么请大家免去为您做您作为开发人员、软件工程师或想成为编码员必须做的事情的痛苦靠自己。这是您学习的一项重要技能。
想成为“真正的工程师”吗?然后遵循“真正的工程实践”,例如“阅读”。您正在学习一个新的 GUI 包。你还没有见过类似的东西。不要自大到相信你永远不需要阅读文档。
呃,为什么要这么说?
如果上面有指示,请转到此处。
我向其他 95% 的人道歉,这……可悲……需要添加提醒,但遗憾的是需要它。
有 5 种资源协同工作,为您提供最快的成功之路。他们是:
- 本用户手册
- 烹饪书
- 170 多个演示程序
- Docstrings 使您能够直接从 Python 或您的 IDE 访问帮助
- 搜索 GitHub 问题作为最后的手段(搜索打开和关闭的问题)
调整自己的节奏。最初的进展是令人兴奋和快节奏的。然而,GUI 需要时间和思想来构建。深呼吸并使用提供的材料,你会做得很好。在运行了一些演示并掌握了窍门之后,不要跳过 GUI 的设计阶段。如果您之前尝试过其他 GUI 框架,无论成功与否,那么您知道您已经在使用 PySimpleGUI 与底层 GUI 框架的游戏中遥遥领先。您可能会觉得您在代码上工作的 3 天时间已经很长了,但与学习 Qt 的 3 天时间相比,PySimpleGUI 学习起来会显得微不足道。
关于文档的这一部分位于本文档的顶部并非偶然。
对于这种大小的包裹,本文档的长度并不大。事实上,它仍然是一个文档,它是 GitHub 的自述文件。它不是用复杂的英语写的。完全的初学者是可以理解的。只需按Control+F一下即可搜索此文档。通常,您会找到少于 6 个匹配项。
文档和演示已过时
有时文档与您正在运行的代码版本不完全匹配。有时演示程序未更新以匹配对 SDK 所做的更改。一般来说,事情不会同时发生。因此,很可能是您发现了错误或不一致,或者某些内容不再适用于最新版本的外部库。
如果您发现了其中一个问题,并且您已经进行了搜索以确保这不是您的简单错误,那么无论如何都要在 GitHub 上记录问题。如果您已采取简单的步骤先查看文档,请不要害怕报告问题。
平台
硬件和操作系统支持
PySimpleGUI 可以在 Windows、Linux 和 Mac 上运行,就像 tkinter、Qt、WxPython 和 Remi 一样。如果您可以在您的机器上安装/运行底层 GUI 框架,那么 PySimpleGUI 也将在那里运行。
硬件
- 个人电脑、台式机、笔记本电脑
- 所有类型的 Mac
- 树莓派
- Android 设备,例如手机和平板电脑
- 虚拟机在线(无硬件) - repl.it
操作系统
- 视窗 7、8、10
- PC 上的 Linux - 在许多发行版上测试
- 树莓派上的 Linux
- Android 上的 Linux - 可以使用 Termux 或 PyDroid3
- Mac OS(抱歉对 Mac 了解不多,除了 Mac 不喜欢 tkinter)
Python 版本
截至2018 年 9 月 25 日,使用tkinter版本的 PySimpleGUI 时,Python 3 和 Python 2.7 都受支持!Python 3 版本名为. Python 2.7 版本是. 它们是分开安装的,进口的也不一样。有关详细信息,请参阅安装部分中的说明。 其他端口都不能使用 Python 2。PySimpleGUIPySimpleGUI27
请注意,2020 年 1 月 1 日,此 GitHub 上的 2.7 端口将不复存在。如果您想知道需要多长时间才能迁移到 Python 3 版本的 PySimpleGUI,请访问:https://pythonclock。组织/ . 唯一可用的是 PySimpleGUI27 的不受支持的 PyPI 版本。
我所说的“将不再存在于这个 GitHub 上”是指它将被完全删除。没有源代码,没有支持程序。没有什么。如果您在 12 月无法使用 2.7,那么您应该在 2019 年 12 月 31 日分叉 2.7 代码。旧版 Python 在这里没有永久的家。
输出设备
除了作为桌面 GUI 运行之外,您还可以通过运行 PySimpleGUIWeb 在 Web 浏览器中运行您的 GUI。
这非常适合“无头”设置,例如作为机器人核心的 Raspberry Pi 或其他没有正常显示屏的设计。对于这些设备,运行一个永不退出的 PySimpleGUIWeb 程序。
然后通过使用浏览器访问 Pi 的 IP 地址(和端口号)连接到您的应用程序,您将与您的应用程序进行通信。您可以使用它来进行配置更改,甚至可以使用 GUI 中的按钮来控制机器人或其他硬件
一个完整的 PySimpleGUI 程序(获取要点)
在深入细节之前,这里先介绍一下 PySimpleGUI 是什么/做什么以及为什么它如此强大。
您在本文档中不断听到“自定义窗口”,因为那是您正在制作和使用的……您自己的自定义窗口。
ELEMENTS是一个随处可见的词……在代码、文档中…… Elements == PySimpleGUI 的小部件。为了不将 tkinter 按钮小部件与 PySimpleGUI 按钮元素混淆,决定将 PySimpleGUI 的小部件称为元素以避免混淆。
如果在 3 行代码中定义了具有 3“行”元素的 GUI,那不是很好吗?这正是它的完成方式。Elements 的每一行都是一个列表。把所有这些列表放在一起,你就有了一个窗口。
处理按钮点击和东西怎么样。这是下面以 while 循环开头的 4 行代码。
现在查看layout变量,然后查看下面的窗口图形。定义一个窗口就是采用您可以直观地看到的设计,然后在代码中直观地创建它。一行元素 = 1 行代码(如果您的窗口拥挤,可以跨越更多)。窗口正是我们在代码中看到的。一行文字,一行文字和一个输入区,最后是ok和cancel按钮。
这使得编码过程非常快速并且代码量非常小
import PySimpleGUI as sg
# All the stuff inside your window. This is the PSG magic code compactor...
layout = [ [sg.Text('Some text on Row 1')],
[sg.Text('Enter something on Row 2'), sg.InputText()],
[sg.OK(), sg.Cancel()]]
# Create the Window
window = sg.Window('Window Title', layout)
# Event Loop to process "events"
while True:
event, values = window.Read()
if event in (None, 'Cancel'):
break
window.Close()
您必须承认,上面的代码看起来比您之前研究过的 tkinter 代码更“有趣”。向您的 GUI 添加东西是微不足道的。您可以清楚地看到这 3 行代码与 Window 中布局的特定元素的“映射”。这不是一个把戏。在 PySimpleGUI 中编写代码是多么容易。有了这个简单的概念,就可以创建您想要的任何窗口布局。如果您需要更多控制,可以使用参数在窗口内移动元素。
提前完成您的 GUI 项目是一件令人兴奋的事。有些人会花额外的时间来完善他们的 GUI 以使其更好,添加更多的花里胡哨,因为它非常简单,并且在编写程序时看到一个又一个成功是很有趣的。
有些是更高级的用户,他们突破界限并使用他们自己的扩展扩展 PySimpleGUI。
其他人,如 IT 人员和黑客,正忙于开发一个又一个 GUI 程序,并创建其他人可以使用的工具。最后,有一种简单的方法可以将 GUI 放入您的程序并将其提供给某人。对于某些人来说,这是一个相当大的能力飞跃。听到这些成功真是太好了。它最终激励了每个人。你的成功可以很容易地激励下一个人尝试一下,也有可能取得成功。
通常有一个 PySimpleGUI 元素到 GUI 小部件的一对一映射。PySimpleGUI 中的“文本元素”== tkinter 中的“标签小部件”。在所有 PySimpleGUI 平台上对您来说保持不变的是,无论底层 GUI 框架如何调用在您的窗口中放置文本的东西,您将始终使用 PySimpleGUI 文本元素来访问它。
最后一点魔力在于元素是如何创建和更改的。
到目前为止,您已经看到了没有自定义元素的简单布局。自定义和配置元素是 PySimpleGUI 利用 Python 语言让您的生活更轻松的另一个地方。
那些具有标准系统设置以外的设置的元素呢?如果我希望我的文本是蓝色的,在绿色背景上有一个 Courier 字体怎么办。写得很简单:
Text('This is some text', font='Courier 12', text_color='blue', background_color='green')
Python 命名参数广泛存在于 PySimpleGUI 中。它们是使代码紧凑、可读且易于编写的关键。
正如您将在后面讨论元素参数的部分中学习的那样,如果您选择使用它们,您可以使用很多选项。Text Element您可以更改 15 个参数。这就是为什么建议将 PyCharm 作为您的 IDE 的原因之一......它在您输入代码时显示文档方面做得非常出色。
这就是 基础
你怎么看?到目前为止,比您以前在 Python 中使用 GUI 更容易吗?一些程序,事实上很多,就像这个例子一样简单。
但是 PySimpleGUI 肯定不止于此。这是一个开始。您将在其上建造的脚手架。
底层 GUI 框架和每个的状态
目前有 4 个积极开发和维护的 PySimpleGUI“端口”。这些包括:
- tkinter - 完全完成
- Qt 使用 Pyside2 - Alpha 阶段。并非所有元素的所有功能都已完成
- WxPython - 开发阶段,预发布器。并非所有元素都已完成。多个窗口的一些已知问题
- Remi(Web 浏览器支持)- 开发阶段,预发布。
虽然 tkinter 端口 PySimpleGUI 是 PySimpleGUI 唯一 100% 完成的版本,但其他 3 个端口具有很多功能,并且大部分安装都在积极使用。您可以在本文档的最顶部查看 Pip 安装的数量,以比较每个端口的安装基础大小。“徽章”就在徽标之后。
PySimpleGUI“家庭”
有什么大不了的?它是什么?
PySimpleGUI 包装了 tkinter、Qt、WxPython 和 Remi,因此您可以获得所有相同的小部件,但您可以以更友好的方式与它们交互,这在端口中是常见的。
包装纸有什么作用(哟!PSG 在家里!)?它为您执行布局、样板代码、创建和管理 GUI 小部件,并为您提供简单、高效的界面。 最重要的是,它将 tkinter/Qt/Wx/Remi 中的小部件映射到 PySimpleGUI 元素中。最后,它用我们自己的一个替换了 GUI 的事件循环。
您已经看过代码示例。最重要的是,任何人都可以简单快速地创建一个与用本机 GUI 框架编写的 GUI 相匹配的 GUI。您可以创建具有复杂元素交互的复杂布局。而且,您编写的要在 tkinter 上运行的代码也将通过更改 import 语句在 Qt 上运行。
如果您想更深入地了解PySimpleGUI 的体系结构,您可以在 ReadTheDocs 上与 Readme & Cookbook 相同的文档中找到它。顶部有一个标签,每个文档都有标签。
“港口”
如上所述,发生了不同的端口。每个在主项目下的 GitHub 上都有自己的位置。他们有自己的自述文件,是对本文档的扩充……它们旨在一起使用。
PySimpleGUI 作为 5 个不同的包在 PyPI 上发布。
- PySimpleGUI - tkinter 版本
- PySimpleGUI27 - 在 2.7 上运行的 tkinter 版本
- PySimpleGUIWx - WxPython 版本
- PySimpleGUIQt - PySided2 版本
- PySimpleGUIWeb - Web (Remi) 版本
您需要单独安装它们
还有一个附带的调试器,称为imwatchingyou. 如果您正在运行 PySimpleGUI 的 tkinter 版本,则不需要安装调试器,因为有一个版本直接嵌入到 PySimpleGUI 中。
Qt版本
Qt 是继 tkinter 之后的第二个端口。它是第二完整的,原始的 PySimpleGUI (tkinter) 是最完整的,并且很可能继续成为领先者。PySimpleGUIQt 上提供了所有元素。
如前所述,每个端口都有一个区域。对于 Qt,您可以在PySimpleGUIQt GitHub 站点上了解更多信息。 您可以在那里找到Qt 版本的单独自述文件。这适用于所有 PySimpleGUI 端口。
如果您正在寻找更“现代”的东西,请试一试。PySimpleGUIQt 目前处于Alpha阶段。 所有小部件都可以使用,但有些可能还没有功能齐全。 如果缺少一个并且您的项目需要它,请记录一个问题。新功能就是这样诞生的。
这里是对 Qt Elements 的总结,没有在设计上花费真正的精力。这是作为每个端口一部分的“测试工具”的一个示例。如果您运行 PySimpleGUI.py 文件本身,那么您将看到这些测试之一。
如您所见,您可以使用一整套 GUI 元素。所有标准的都在一个窗口中。因此,不要误以为 PySimpleGUIQt 几乎无法工作或没有很多小部件可供选择。您甚至可以获得两个“奖励元素” -Dial和Stretch
WxPython 版本
PySimpleGUIWx GitHub 站点。 WxPython 版本有一个单独的自述文件。
从 2018 年 12 月下旬开始 PySimpleGUIWx 开始使用 SystemTray 图标功能。这使该软件包具有一个功能齐全的功能,可以与 tkinter 一起使用以提供完整的程序。系统托盘功能完整且运行良好。它不久前在公司环境中使用,并且一直在执行,报告的问题很少。
窗口代码与读取操作一起出现。这些元素正在定期完成。但是我遇到了多窗口问题。大约在这个时候,雷米被建议作为一个港口。
Remi(“Web 端口”)一夜之间支持了 WxPython 的努力,Web 成为了第一优先事项,并且继续如此。我们的想法是用 PySimpleGUI、PySimpleGUIQt 和 PySimpleGUIWx 很好地表示了桌面。在这些端口之间是一个可靠的 winowing 系统和 2 个系统托盘实现以及几乎功能完整的 Qt 工作。因此,团队切换到 PySimpleGUIWeb。
网页版(雷米)
PySimpleGUIWeb GitHub 站点。 Web 版本有一个单独的自述文件。
2019 年的新功能,PySimpleGUIWeb。这是一个令人兴奋的发展!Web 浏览器中的 PySimpleGUI!
提供 Web 功能的底层框架是 Python 包 Remi。 https://github.com/dddomodossola/remi Remi 提供小部件以及一个 Web 服务器供您连接。这是一个正在运行的现有新平台,并暂时将 WxPython 端口从最高优先级提升。PySimpleGUIWeb 是当前的高优先级项目。
将此解决方案用于在输入设备或显示器方面没有任何连接的 Pi 项目。在“无头”模式下运行您的 Pi,然后通过 Web 界面访问它。这使您可以轻松访问和更改您的 Pi,而无需连接任何东西。
这并不是为了“提供网页”
PySimpleGUIWeb 首先是一个GUI,一个程序的前端。它旨在让单个用户与GUI连接和交互。
如果超过 1 人同时连接,那么两个用户将看到完全相同的内容,并且将与程序进行交互,就好像单个用户正在使用它一样。
源代码兼容性
理论上,您的源代码可以完全从一个平台移植到另一个平台,只需更改导入语句即可。这就是目标,令人惊讶的是,这种 1 行更改多次有效。看到您的代码在 tkinter 上运行,然后将导入更改为import PySimpleGUIWeb as sgtkinter 窗口,而不是 tkinter 窗口,弹出您的默认浏览器并在其上运行您的窗口,这是一种令人难以置信的感觉。
但是,建议谨慎。 正如您已经阅读过的,一些端口比其他端口更进一步。这意味着当您从一个端口移动到另一个端口时,某些功能可能无法使用。如果您有一个精确对齐元素的应用程序,也可能会有一些对齐调整。
这是什么意思,假设它有效?这意味着跨 GUI 框架移动需要付出微不足道的努力。不喜欢你的 GUI 在 tkinter 上的样子?没问题,改过来试试 PySimpleGUIQt。制作了一个不错的桌面应用程序,但也想把它带到网络上?同样,没问题,使用 PySimpleGUIWeb。
repl.it 版本
想真正让你大吃一惊吗? 查看在您的网络浏览器中运行的这个PySimpleGUI 程序。
由于 repl.it 和 Remi 的魔力,可以在浏览器窗口中运行 PySimpleGUI 代码,而无需在计算机上运行 Python。这应该被视为一种教学和示范辅助工具。它并不是一种提供网页的方式。当每个用户分叉并获得自己的、完全不同的工作空间时,它不会以任何方式工作。
在 repl.it 上运行的 PySimpleGUI 有 2 个端口 - PySimpleGUI 和 PySimpleGUIWeb。
PySimpleGUI(基于 tkinter)
主要的 PySimpleGUI 端口在 repl.it 上运行良好,因为他们在让 tkinter 在这些虚拟机上运行方面做得非常出色。从头开始创建程序,您将需要选择“Python with tkinter”项目类型。
渲染窗口的虚拟屏幕尺寸不是很大,因此请注意窗口的大小,否则最终可能会出现无法访问的按钮。
您可能必须为您的项目“安装” PySimpleGUI 包。如果它没有自动为您安装,请单击浏览器窗口左边缘的立方体,然后根据您使用的类型输入 PySimpleGUI 或 PySimpleGUIWeb。
PySimpleGUIWeb(基于 Remi)
对于使用 repl 运行的 PySimpleGUIWeb 程序,它会自动从 PyPI 下载最新的 PySimpleGUIWeb 并将其安装到虚拟 Python 环境中。所需要的只是键入import PySimpleGUIWeb,您将拥有一个 Python 环境并运行最新的 PyPI 版本的 PySimpleGUIWeb。
从头开始创建 repl.it 项目/故障排除
要从头开始创建您自己的 repl.it PySimpleGUI 项目,首先选择您想要的 Python 虚拟机类型。对于 PySimpleGUI 程序,选择“Python with tkinter”项目类型。对于 PySimpleGUIWeb,选择普通的 Python 项目。
有时 repl.it 没有做自动导入的事情。如果由于某种原因这不起作用,您可以通过单击界面左侧的包按钮来安装包,输入包名称(PySimpleGUI 或 PySimpleGUIWeb)并安装它。
为什么这很酷(听老师讲,教程作者)
教育工作者尤其应该感兴趣。学生不仅可以轻松地发布他们的作业供老师访问,而且老师还可以在线运行学生程序。无需下载。运行它并检查结果。
对于想要分享他们的代码的人来说,尤其是在帮助有问题的人时,这是一个很好的地方。那些希望看到您的作品的人不必运行 Python 也不必安装 PySimpleGUI。
我使用它的方式是首先在 Windows 上编写我的 PySimpleGUI 代码,然后将其复制并粘贴到 Repl.it 中。
最后,您可以将这些 Repl.it 窗口嵌入到网页、论坛帖子等中。“共享”按钮能够为您提供“iframe”的代码块,该代码块将呈现到您的工作中的 repl.it 程序中。页。看起来很神奇,但加载速度可能很慢。
Repl.it 不是供您“部署”应用程序的 Web 服务器!
Repl.it 并不是为了提供应用程序和网页。试图以这种方式使用它不会产生令人满意的结果。尝试“部署”使用它的界面太慢且太技术化。PySimpleGUIWeb 不是提供网页服务的好选择。它的目的更多是构建在浏览器中运行的 GUI。
麦克斯
令人惊讶的是,Python GUI 代码完全跨平台,从 Windows 到 Mac 再到 Linux。没有源代码更改。PySimpleGUI 和 PySimpleGUIQt 都是如此。
但是,Mac 很糟糕。他们特别喜欢 tkinter。Mac 禁用“外观”调用。特别是彩色按钮坏了。而且,您在使用 FileBrowse 按钮时无法指定文件类型。这些都不是 PySimpleGUI 代码问题,当然,它们都在 tkinter 中。考虑在 Mac 上使用 Qt 而不是 tkinter。或者,如果使用 tkinter,请创建自己的按钮图像。
如果您是遇到问题的 Mac 用户,请查看未解决和已解决的问题。很有可能该问题至少以前已经出现过,甚至可能有修复或解决方法
众所周知,切换到“灯光模式”可以解决一些问题。 老实说,它们是 tkinter/Mac 问题。
确保您正在运行 tkinter 8.6 及更高版本。但是,正如我正在学习的那样,8.6 几乎可以意味着任何东西,因为没有提供次要版本号(8.6.1 等)。事实证明 8.6 已经开发了好几年了。例如,Python 3.7.4 附带的 8.6 不支持表格颜色,即使它是 8.6 版。
支持
不要默默承受
经常检查 GitHub 问题。常常。 请只在那里和那里发布您的问题和问题。在您尝试在 GitHub 上发帖之前,请不要在 Reddit、Stackoverflow、论坛上发帖。
为什么? 它将为您提供最好的支持。 其次,您将帮助该项目,因为您遇到的问题很可能是一个错误,甚至是一个已知的错误。为什么要花几个小时来挣扎,与已知的错误作斗争?
它不是一个超级错误的包,但用户确实会遇到同样的问题。也许文档中的某些内容解释得不够好。也许你犯了一个常见的错误。也许这个功能还没有完成。
在 GitHub 上发布问题不会看起来很愚蠢。恰恰相反。
如何记录问题
PySimpleGUI 是一个活跃的项目。 经常修复错误,添加功能。如果您遇到麻烦,请在GitHub 站点上打开一个问题,您将获得帮助。在 StackOverflow、论坛、邮件列表、Reddit 等上发布问题并不是获得支持的最快途径,如果不熟悉该软件包的人难以为您提供帮助,那么使用它很可能会让您误入歧途。您可能还会遇到“我不知道 PySimpleGUI(因此可能不喜欢它),但我知道您可以使用 Qt 做到这一点”的常见响应。
为什么只有 1 个位置?这很简单......这是跟踪错误、增强等的地方。这是该项目在 Internet 上的位置。这不是什么奇怪的控制,告诉人们如何做事。这样您就可以得到最好和最快的支持。
因此,打开一个问题,选择“自定义表单”并完整填写。所有问题背后都有很好的理由。偷工减料只会降低您获得帮助和获得高质量帮助的机会,因为远程调试非常困难。不要因为没有提供足够的信息而妨碍那些想要提供帮助的人。
确保首先在 IDE 之外运行您的程序。python使用orpython3命令从 shell 启动程序。在许多情况下,很多时间都花在了解决由 IDE 引起的问题上。通过从命令行运行,您可以将整个问题排除在问题之外,这是重要的一步。
不要坐着炖,一遍又一遍地尝试同样的事情,直到你讨厌生活……停下来,在 GitHub 上发布一个问题。有人会回答你。支持已包含在此软件包的购买价格中(恐怕质量水平也与价格相匹配)。当您的免费支持有点糟糕时,请不要太沮丧,但它是免费的,通常是很好的建议。
PySimpleGUI 巨魔
是的,他们在外面。在 10 亿年内永远都不会想到会有反对这个方案的人,来自一小部分人,但声音很大。我天真地认为每个人都会支持,看到价值,手牵手围着火,唱歌,最起码是诚实的。但是,这不是堪萨斯州,互联网也很好...... WTF 是人吗?
如果有人积极劝阻您不要使用此软件包,那么请知道您走在正确的轨道上,您应该试一试。有时会发生这样的事情,因为该人为特定公司工作,或者他们有自己的 GUI 包......这不是流行的,或者他们只是喜欢拆掉东西。
我保证你不会终生被毁坏(如所声称的那样)。它不会使你成为一个有坏习惯的坏程序员。它不会毁了你的职业生涯。它不会教你坏习惯。我认识的一个人根据他编写的 PySimpleGUI 程序获得了奖金。
所以不要害怕。 以成功为目标怎么样? 花时间完善您的 GUI 并处理您的主要代码,而不是在 Qt 库中的大量文档中苦苦挣扎,尝试设置某些东西的颜色。
从 PySimpleGUI 开始,以后如果你想直接在 Qt 中编写代码以获得更多的控制权,你不会因为你的 PySimpleGUI 知识而无法掌握 Qt。如果有的话,您将比大多数刚开始的人拥有更多的知识,因为您已经构建了工作的 GUI,也许其中很多,并且了解如何布局有效的界面以及在 GUI 小部件方面接受过良好的教育以及它们是如何工作的。
目标听众
PySimpleGUI 试图解决 80% 的 GUI问题。其他 20% 直接使用 tkinter、Qt、WxPython、Remi 或任何满足需要的东西。那 80% 是一个巨大的问题空间。同样,PySimpleGUI 的“简单”描述了它的易用性,而不是它解决的问题空间的性质。请注意,人不是该描述的一部分。它并不是要为 80% 的尝试它的人解决 GUI 问题。PySimpleGUI 试图解决 80% 的 GUI问题,无论程序员的经验水平如何。
PySimpleGUI 的设计考虑了初学者和经验丰富的开发人员。为什么?因为两者都倾向于喜欢紧凑的代码。就像人一样,我们只是想把事情做完,对吧?
初学者可以在 Python 教育的第一周开始使用 GUI 。专业人员可以直接跳入池的深处,使用整个元素阵列及其功能来构建数据库应用程序之类的东西。
下面是 PySimpleGUI 如何为这两组服务的一个很好的例子...... InputTextElement 有 16 个潜在参数,但您会发现初学者设置的 0 或 1 个参数。查看本文档中的示例,您将看到代码片段使用了一小部分潜在参数/设置。简单...对于默认情况保持简单。这是 PySimpleGUI 任务的一部分。
一些开发人员非常依赖于现有的 GUI 框架架构(Qt、WxPyton、tkinter)。他们喜欢现有的 GUI 架构(除了这个之外,它们都大致相同)。如果你在那个人群中,加入街对面的“20% 俱乐部”。那里有很多空间,有很多可能的解决方案。
但是,如何快速停下来进行一些开放的思想练习。即使您不使用它,也许您也会提出一个有趣的建议。或者,也许 PySimpleGUI 做了一些事情,可以激发你直接在 Qt 中编写类似的东西。请至少对此保持文明。有多种架构的空间。请记住,编写一些 PySimpleGUI 代码不会对您造成伤害,就像编写一些 tkinter 或 Qt 代码一样。你感觉受到伤害的机会更有可能来自这 2 个中的一个。
初学者和更简单的程序
初学者停下来看看有几个原因。第一种是简单地将一个简单的 GUI 放在现有命令行应用程序的前面。或者,您可能需要弹出一个框来获取文件名。这些通常可以是简单的单线Popup电话。当然,您不必成为初学者即可将 GUI 添加到现有命令行程序之一。不要觉得因为你是一个高级程序员,你就需要一个高级解决方案。
如果你有一个更复杂、更完整、可能是多窗口的设计,那么 PySimpleGUI 仍然可能是你的最佳选择。
这个包不仅非常适合用作您的第一个 GUI 包,而且还教授如何设计和使用 GUI。通过删除语法和冗长的代码,它比现有的 GUI 做得更好,这些代码可能会将原本非常简单的程序变成完全无法识别的东西。使用 PySimpleGUI,您只需检查“布局”即可查看正在使用的不同 GUI 元素。
为什么 PySimpleGUI 让学习 GUI 变得更容易?因为它删除了类、回调函数、面向对象的设计,以便更好地摆脱你的束缚,让你完全专注于你的 GUI,而不是如何在代码中表示它。
结果是实现与直接在 Qt5 中编写代码完全相同的布局和小部件的代码量的 1/2 到 1/10。它已经被测试了很多次......一次又一次,PySimpleGUI 生成的代码比 Qt 和它运行的框架少得多。
完全忘记语法,只关注 PySimpleGUI 程序员的整体活动。你必须设计你的窗口......确定你的输入和输出,将按钮放在战略位置,创建菜单......你会忙着做所有这些事情来设计和定义你的 GUI 完全独立于底层框架。
在您完成所有这些设计工作并准备好构建您的 GUI 之后,您将面临学习 GUI SDK 的任务。为什么不从能给你带来许多成功的简单的开始呢?您才刚刚开始,所以请稍事休息并使用 PySimpleGUI,这样您就可以快速完成工作并继续进行下一个 GUI 挑战。
高级程序员、敏锐的老前辈、代码高手和代码骑师
它并不完美,但 PySimpleGUI 是一项了不起的技术。过去有使用 GUI 经验的程序员、计算机科学家会认识到这种简单架构的强大功能。
我从经验丰富的专业人士那里听到的是 PySimpleGUI 为他们节省了大量时间。他们以前写过 GUI 代码。他们知道如何布置窗户。这些人只是想让他们的窗口快速工作。
在 PyCharm、Visual Studio 和 Wing(官方支持的 IDE 列表)等 IDE 的帮助下,您可以获得有关您正在调用的即时文档。在 PyCharm 上,您会立即看到调用签名以及每个参数的解释。
如果屏幕截图、演示程序和文档不能说服您至少尝试一次,那么您太忙了,或者.....我不知道,我停止猜测“为什么?” 前一段时间。
一些最不愿意尝试 PySimpleGUI 的人最终成为了最大的支持者。
感谢 PySimpleGUI 用户
我要感谢从 2018 年开始使用 PySimpleGUI 的早期用户。您的建议帮助塑造了这个包,并使其快速向前发展。
对于所有用户,虽然我无法告诉您有人在日志记录和问题、私人消息或电子邮件中说“谢谢您使用 PySimpleGUI”的次数,但我可以告诉您,这是重要的。
每一个“谢谢”短语,无论你认为它有多小,都会有很大帮助。
有时它可以让我解决问题或让我编写更多文档来尝试帮助人们更快更好地理解。我们只是说效果总是积极的,而且往往很重要。
PySimpleGUI 用户非常好。我怀疑所有的开源项目都是这样的,但我可能是错的,每个 GitHub 存储库都有很棒的用户。如果是这样,那就更厉害了!
感谢 PySimpleGUI 用户!
学习资源
本文档....如果您希望学习和使用 PySimpleGUI,您必须愿意阅读本文档。
如果您甚至不愿意尝试弄清楚如何做某事或找到问题的解决方案,并且确定“首先发布问题比查看文档更容易”,那么这不是适合您的 GUI 包. 如果你不愿意帮助自己,那就不要指望别人先尝试。 您需要至少通过对本文档进行一些搜索来坚持您的讨价还价。
虽然 PySimpleGUI 使您能够轻松编写代码,但这并不意味着它会神奇地让您的大脑充满关于如何使用它的知识。内置的文档字符串有所帮助,但它们只能做到这一点。
搜索此文档就像按 Control + F 一样简单。
该文档在 GitHub 主页上,作为自述文件。http://www.PySimpleGUI.com将带您到那里。如果您更喜欢左边缘有目录的版本,那么您想访问http://www.PySimpleGUI.org。
PySimpleGUI,以开发人员为中心的模型
你可能会认为你被灌输了所有这些声称 PySimpleGUI 是专门为让你的生活比其他选择更轻松和更有趣的说法......尤其是在阅读了上面关于阅读本手册的部分之后。
心理战
被洗脑了。知道有一个活跃的活动可以让您使用 PySimpleGUI 取得成功。吸引您并让您继续执行您的程序直到您满意的“钩子”是对您大脑中的多巴胺进行处理。是的,你的 PySimpleGUI 老鼠,按下那个以工作程序的形式掉落食物颗粒奖励的栏。
这样做的方式是让你一次次成功,间隔很短。为此,您所做的必须有效。您运行的代码必须有效。对您的程序进行小的更改并一遍又一遍地运行它,而不是尝试进行一大堆的更改。一次转动一个旋钮,你会没事的。
找到 IDE 的键盘快捷键以运行当前显示的程序,以便运行代码需要 1 次击键。在 PyCharm 上,运行您看到的内容的关键是 Control + Shift + F10。一次要压制很多。我在键盘上编写了一个热键,这样当我按下它时它就会发出那个组合键。结果是一个运行的按钮。
工具
创建这些工具是为了帮助您源源不断地取得这些小成功。
- 本自述文件及其示例代码
- The Cookbook - 复制、粘贴、运行、成功
- 演示程序 - 复制这些小程序,让自己快速入门
- IDE 中显示的文档(文档字符串)意味着您无需打开任何文档即可获得每个元素和函数调用可用的全部选项
PySimpleGUI 的初始“启动并运行”部分应该花费您不到 5 分钟的时间。目标是从您决定“我会试一试”到您的第一个窗口出现在屏幕上“哦哇哦,就这么简单?!”之间的 5 分钟。
PySimpleGUI 的主要学习路径是:
- 本自述文件超过 100 页 PySimpleGUI 用户手册
- 食谱 - 让你快速上手的食谱
- 演示程序 - 开始破解这些正在运行的解决方案之一
- YouTube 视频 - 如果您喜欢教学视频,这里有 15 个以上的视频
一切都旨在为您提供“快速入门”,无论是食谱还是演示程序。这个想法是给你一些运行的东西,让你破解它。作为开发人员,这可以节省大量时间。
您从一个工作程序开始,即屏幕上的 GUI。然后就可以了。如果你破坏了某些东西("a happy little accident"正如 Bob Ross 所说),那么你总是可以稍微回溯到一个已知的工作点。
很大比例的用户报告说在一天内学习了 PySimpleGUI 并完成了他们的项目。
这不是罕见的事件,也不是吹牛。GUI 编程从定义上来说并不难,PySimpleGUI 确实让它变得更容易上手和更容易(更不用说更简单了)。
但是,当您进入未知的新领域时,您需要查看此文档。不要猜测......或者更具体地说,不要猜测,然后在它不起作用时放弃。
本自述文件和食谱
自述文件和食谱等最好在 ReadTheDocs 上查看。最快的方法是访问: http ://www.PySimpleGUI.org
您将被自动转发到正确的目的地。ReadTheDocs 上有多个选项卡。一份用于主自述文件,一份用于食谱。那里还有其他文档,例如建筑设计文档。
Cookbook 有大约 27 个“食谱”或可以轻松复制和粘贴的短程序。
演示程序
GitHub 存储库有演示程序。有些是为普通的 PySimpleGUI 构建的,通常可以移植到其他版本的 PySimpleGUI。还有一些与其他端口之一相关联。最简单的 GitHub 方法:
在撰写本文时,2019-07-10 有 177 个演示程序供您选择。
这些程序向您展示了如何使用元素,尤其是如何将 PySimpleGUI 与一些流行的开源技术(例如 OpenCV、PyGame、PyPlot 和 Matplotlib 等等)集成在一起。
主文件夹中的许多演示程序将在 PySimpleGUI 的多个端口上运行。还有特定于端口的演示程序。您会在带有端口的文件夹中找到它们。因此,Qt 特定的演示程序位于 PySimpleGUIQt 文件夹中。
快速浏览
在深入了解细节之前,让我们对 PySimpleGUI 进行一次超级简短的浏览。PySimpleGUI 中有 2 个级别的窗口支持 - 高级和自定义。
高级调用是那些为您执行大量工作的调用。这些不是定制的窗口(它们是与 PySimpleGUI 交互的另一种方式)。
让我们使用这些高级调用中的一个,Popup并使用它来创建我们的第一个窗口,即强制性的“Hello World”。这是一行代码。您可以像打印语句一样使用这些调用,根据需要添加任意数量的参数和类型。
import PySimpleGUI as sg
sg.Popup('Hello From PySimpleGUI!', 'This is the shortest GUI program ever!')
或者在 1 行代码中自定义 GUI怎么样?不开玩笑,这是一个有效的程序,它使用元素并生成与您通常在 tkinter 程序中相同的小部件。它只是被压缩在一起而已,严格用于演示目的,因为没有必要在紧凑性方面走极端,除非你有理由这样做,然后你会庆幸它是可能的。
import PySimpleGUI as sg
event, values = sg.Window('Get filename example', [[sg.Text('Filename')], [sg.Input(), sg.FileBrowse()], [sg.OK(), sg.Cancel()] ]).Read()
简单之美
总有一天我会找到合适的词,它们会很简单。? 杰克·凯鲁亚克
就像上面的示例一样,您可以将内容压缩成 1 行,这很好,但它不可读。让我们添加一些空格,这样您就可以看到PySimpleGUI 代码的美妙之处。
花点时间看看下面的代码。你能“看到”窗口查看layout变量,知道每一行代码代表一行元素吗?窗口中显示了 3“行”元素,并且有 3 行代码定义它。
为窗口创建和读取用户的输入占用了最后两行代码,一是创建窗口,最后一行向用户显示窗口并获取输入值(他们点击了什么按钮,在 Input Element 中输入了什么)
import PySimpleGUI as sg
layout = [[sg.Text('Filename')],
[sg.Input(), sg.FileBrowse()],
[sg.OK(), sg.Cancel()]]
window = sg.Window('Get filename example', layout)
event, values = window.Read()
与其他 GUI SDK 不同,您很可能理解您刚刚阅读的每一行代码,即使您尚未从本文档中阅读有关如何在布局中编写元素的单一指令行。
无需编写讨厌的类,无需担心回调函数。使用 PySimpleGUI 显示带有一些文本、一个输入区域和 2 个按钮的窗口都不需要这些。
在 tktinter 中,相同的代码要长 5 倍,我猜你将无法仅仅阅读和理解它