在屏幕上的任何位置显示带有图标、标题和消息的托盘样式消息。可选择渐入/渐出
项目描述
PySimpleGUI 用户手册
面向人类的Python GUI - 将tkinter、Qt、Remi、WxPython转换为便携式、人性化的Pythonic接口
本手册内容丰富,满是答案,所以请从这里开始寻找答案。在GitHub上打开问题之前,请先阅读/搜索。按Control F并输入。
快速入门
安装
pip install pysimplegui
or
pip3 install pysimplegui
此代码
import PySimpleGUI as sg
sg.theme('DarkAmber') # Add a touch of color
# All the stuff inside your window.
layout = [ [sg.Text('Some text on Row 1')],
[sg.Text('Enter something on Row 2'), sg.InputText()],
[sg.Button('Ok'), sg.Button('Cancel')] ]
# Create the Window
window = sg.Window('Window Title', layout)
# Event Loop to process "events" and get the "values" of the inputs
while True:
event, values = window.read()
if event in (None, 'Cancel'): # if user closes window or clicks cancel
break
print('You entered ', values[0])
window.close()
创建此窗口
并返回输入的值以及点击的按钮。
有疑问吗?就这么简单。
在寻找一个GUI包吗?你在...
- 想要将你的Python代码从命令行世界带入GUI的便捷性中吗?
- 坐在一个触摸屏的Raspberry Pi上,因为你不具备学习GUI SDK的时间而让它浪费?
- 进入机器学习并且对命令行感到厌倦?
- 一个IT男/女,已经编写了一些酷炫的工具,但由于公司政策,除非是EXE文件,否则无法分享?
- 想要与你朋友或家人分享你的程序(他们不是那么古怪,以至于他们运行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(有限支持)
- 只需更改导入语句即可轻松地在tkinter、Qt、WxPython和Web(Remi)之间移动。
- 在Python中同时编写桌面和基于Web的GUI的唯一方法
- 从零开始作为一个纯Python实现开发,具有Python友好的接口。
- 使用WxPython在系统托盘运行你的程序。或者,更改导入并使用Qt运行,无需其他更改。
- 与Qt Designer兼容
- 内置调试器
- 积极维护和增强 - 有4个端口正在进行中,所有这些都被用户使用。
- 适用于企业和家庭用户。
- 吸引Python新手和经验丰富的Pythonista。
- 重点完全在于开发者(你)和使他们的生活更简单、更易于控制。
- 170多个演示程序教你如何与许多流行的包(如OpenCV、Matplotlib、PyGame等)集成。
- 200页的文档,一本食谱,内置使用docstrings的帮助,简而言之,它有大量的文档。
2019年7月注解 - 此readme是从GitHub上位于PySimpleGUI.py文件的readme生成的。因此,其中一些调用或参数可能不会与pip安装的PySimpleGUI匹配。
GUI开发不必困难或痛苦。它可以(并且是)有趣的
用户对PySimpleGUI的评价
(这些评论都是自发提供的,不是付费推荐 - 除了他们收到的巨大感谢之外!)
"我一直在业余时间学习PyQT,作为GUI设计和如何将其应用于现有脚本的入门...用了大约30分钟才弄清楚PySimpleGUI并使我的脚本与GUI一起工作。"
"Python对我来说一直是一个噩梦,我像瘟疫一样避开它。直到我看到了PySimpleGUI。"
我对它的直观性感到非常惊讶,比原始的tk/qt要强得多。这位开发者在项目中也非常活跃,所以如果你遇到无法让代码按你想要的方式运行的情况,你可以提出bug/增强问题,这些问题几乎肯定会得到有意义的回应。
这个库是Python中GUI编程最容易的方式!我完全爱上了它
哇,这个readme内容详尽且优秀。(经常听到对文档的爱)
从R语言转过来,Python在GUI方面绝对流畅。PySimpleGUI是个梦。
我现在已经写了大约4或5个月的Python程序。直到这个星期,我从未在Tkinter等UI库上取得过成功。我从无法可靠地加载Tkinter窗口,到一夜之间用PySimpleGUI制作了一个加载界面,以及完整的程序。
我爱PySimpleGUI!我一直在我的Python课堂上用PySimpleGUI代替Tkinter来教学。
我希望PySimpleGUI能适用于每一种编程语言
从这里开始 - 带有目录的用户手册
ReadTheDocs <------ 由于有目录、所有文档都在一个地方、以及更好的格式化,这是阅读文档的最佳地方。在这里开始你的学习。PySimpleGUI.org很容易记住。
快速链接到帮助和最新新闻和发布
主页 - 最新readme和代码 - GitHub 容易记住:PySimpleGUI.com
YouTube视频 - 如果你喜欢教学视频,PySimpleGUI项目制作了超过15个视频
其他人的YouTube视频。这些视频的制作价值比上面的视频要高。
- 一个极好的教程 PySimpleGUI概念 - 视频1
- 构建计算器 Python计算器带GUI | PySimpleGUI | Texas Instruments DataMath II
- 记事本 Python中的记事本 - PySimpleGUI
- 文件搜索引擎 文件搜索引擎 | Python组合项目中的GUI | PySimpleGUI
关于PySimpleGUI文档系统
本用户手册(也是项目的readme)是PySimpleGUI编程环境的一个重要部分。
如果你是一名专业人士或软件开发高手,那么你了解文档在技术发展世界中的作用。你可以跳过这部分内容....寻找下面的加粗“转到此处”。
RTFM(Read The Fine Manual,阅读用户手册)不是一个新的缩写词。它追溯到1979年,计算机时代的黎明,特别是微处理器的出现。重点是,这不是一个新的问题。这是一个非常老的问题。
这里需要直率,因为微妙的方法过去一直没有起作用
有时,你将需要阅读或搜索此文档才能成功。
重新阅读那个声明。如果你是那种认为“在StackOverflow上发帖比阅读文档更快更简单”的人,这将是一个严重的问题。
如果你还没有成熟到能够理解这项技能或选择不遵循它,那么请节约每个人因为你,作为一名开发者、软件工程师或想成为的程序员,必须自己完成的事情而带来的痛苦。这是你必须学习的重要技能。
想成为一名“真正的工程师”吗?那么遵循“真正的工程实践”,例如“阅读”。你正在学习一个新的GUI软件包。你从未见过类似的东西。不要那么傲慢,认为你永远不会需要阅读文档。
哎呀,为什么需要说这个?
如果上述指示,请转到此处。
我向其他95%的人道歉,但遗憾的是,必须添加这个……可怜的……提醒。
有5种资源共同协作,为你提供通往成功的最快路径。它们是
- 此用户手册
- 食谱
- 170多个演示程序
- Docstrings允许你直接从Python或你的IDE访问帮助
- 作为最后的手段在GitHub问题上进行搜索(搜索开放和关闭的问题)
放慢速度。初始进展令人兴奋且快速。然而,GUI的建设需要时间和思考。深呼吸,使用提供的材料,你会做得很好。在运行一些演示并熟悉了事情之后,不要跳过你GUI的设计阶段。如果你之前尝试过其他GUI框架,无论是成功还是失败,那么你知道使用PySimpleGUI相对于底层的GUI框架你已经领先很多。你可能觉得你已经工作了3天的代码像是永远,但与3天学习Qt相比,PySimpleGUI的学习将显得微不足道。
关于文档的这一部分之所以放在这份文档的顶部,并非偶然。
对于这个大小包的文档来说,它的长度并不是很大的。事实上,它仍然是一份文档,它是GitHub的readme。它不是用复杂的英语写的。即使是完全的初学者也能理解。按下Control+F
即可搜索此文档。通常你只会找到少于6个匹配项。
文档和演示可能过时
有时文档与您正在运行的代码版本并不完全匹配。有时演示程序没有更新以匹配SDK所做的更改。一般来说,事情不会同时发生。因此,你可能会发现错误或不一致,或者某些东西不再与外部库的最新版本兼容。
如果你发现了这些问题,并且你已经搜索以确保这不是你自己的简单错误,那么请务必在GitHub上记录一个问题。如果你首先检查了文档,那么不要害怕报告问题。
平台
硬件和操作系统支持
PySimpleGUI可以在Windows、Linux和Mac上运行,就像tkinter、Qt、WxPython和Remi一样。如果你能在你的机器上安装/运行底层GUI框架,那么PySimpleGUI也会在那里运行。
硬件
- PC、台式机、笔记本电脑
- 所有类型的Mac
- Raspberry Pi
- 如手机和平板电脑之类的Android设备
- 在线虚拟机(无硬件)- repl.it
操作系统
- Windows 7、8、10
- PC上的Linux - 已在几个发行版上进行了测试
- Raspbnerry Pi上的Linux
- Android上的Linux - 可以使用Termux或PyDroid3
- Mac OS
Python版本
截至2018年9月25日,使用PySimpleGUI的tkinter
版本时,同时支持Python 3和Python 2.7!Python 3版本命名为PySimpleGUI
。Python 2.7版本是PySimpleGUI27
。它们是分别安装的,导入方式也不同。有关更多信息,请参阅安装部分的说明。其他端口均不支持Python 2。
Python 2.7代码将于2019年12月31日从本GitHub删除。
请注意,2.7端口将于2020年1月1日在这个GitHub上停止存在。如果您想了解将迁移到PySimpleGUI的Python 3版本需要多长时间,请访问此页面:[https://pythonclock.org/](https://pythonclock.org/)。唯一可用的东西是PySimpleGUI27的一个不受支持的PyPI版本。
当我提到“将在本GitHub上停止存在”时,我的意思是指它将被彻底删除。没有源代码,没有支持程序。什么都没有。如果您在12月份仍然需要使用2.7,那么您应该在2019年12月31日复制2.7代码。旧的Python在这里没有永久的家。这听起来很残酷,但尤其是在安全方面的专家表示,2.7是一个巨大的风险。进一步使用它只会伤害计算机世界。
警告 - tkinter + Python 3.7.3及更高版本,包括3.8,存在问题
Python 3.7.3及更高版本提供的tkinter版本已知存在表格颜色问题。基本上,它们不起作用。因此,如果您想使用在tkinter上运行的纯PySimpleGUI,应使用3.7.2或更低版本。3.6是PySimpleGUI为大多数用户推荐的版本。
输出设备
除了作为桌面GUI运行外,您还可以通过运行PySimpleGUIWeb在Web浏览器中运行您的GUI。
这对于“无头”设置,如作为机器人或其他没有正常显示屏幕的设计的核心的树莓派,是非常理想的。对于这些设备,运行一个PySimpleGUIWeb程序,它永远不会退出。
然后通过浏览器访问树莓派的IP地址(和端口号),您就可以与应用程序进行通信。您可以使用它来做出配置更改,甚至通过GUI中的按钮控制机器人或其他硬件。
完整的PySimpleGUI程序(了解要点)
在深入了解之前,这里是对PySimpleGUI是什么/做什么以及为什么它如此强大的描述。
您在这份文档中会不断听到“自定义窗口”,因为您正在创建和使用自己的自定义窗口...
元素这个词您会随处可见...在代码、文档中...元素 == PySimpleGUI的控件。为了避免混淆tkinter按钮控件与PySimpleGUI按钮元素,决定将PySimpleGUI的控件称为元素以避免混淆。
如果将3“行”的元素定义在3行代码中不是很好吗?这正是实现的方法。每一行元素都是一个列表。将所有这些列表组合起来,您就得到了一个窗口。
关于处理按钮点击等内容,下面开始的while循环是4行代码。
现在看看layout
变量,然后看看下面的窗口图形。定义窗口是取一个您可以看到的设计,然后在代码中可视地创建它。每一行元素等于一行代码(如果窗口很拥挤,可以跨多行)。窗口就是我们在代码中看到的。一行文本,一行文本,一个输入区域,最后是确定和取消按钮。
这使得编码过程非常快,代码量非常小。
import PySimpleGUI as sg
sg.theme('DarkAmber') # Add a little color to your windows
# 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行代码与窗口中特定元素布局的“映射”。这不是一个技巧。这就是在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中得到了广泛的应用。它们在使代码紧凑、可读、易于编写中起着关键作用。
正如你将在后面讨论元素参数的章节中学到的,如果你选择使用它们,有很多选项可供你选择。文本元素有15个可以更改的参数。这也是建议使用PyCharm作为你的IDE的原因之一……它在代码输入时显示文档做得非常出色。
这就是基础。
你觉得呢?到目前为止,比你在Python中的GUI遭遇要简单吗?许多程序实际上就像这个例子一样简单。
但PySimpleGUI绝对不仅仅如此。这是开始。你将建立在这个框架之上。
底层GUI框架及每个框架的状态
目前,有4个活跃开发和维护的PySimpleGUI“端口”。这包括
- tkinter - 完全完成
- Qt使用Pyside2 - 阿尔法阶段。并非所有元素的所有功能都已完成
- WxPython - 开发阶段,预发布器。并非所有元素都已完成。存在一些与多个窗口有关的问题
- Remi(浏览器支持)- 开发阶段,预发布。
虽然PySimpleGUI的tkinter版本是唯一一个100%完成的版本,但其他三个版本也包含了大量功能,并且被大量安装的用户所使用。您可以通过查看文档顶部的Pip安装数量来比较每个版本的安装基数。徽章紧随标志之后。
PySimpleGUI“家族”
有什么大不了的?它是什么?
PySimpleGUI封装了tkinter、Qt、WxPython和Remi,这样您就可以获得所有相同的控件,但您将以更友好、跨版本一致的方式与之交互。
封装器做什么(YO!PSG在屋子里!)?它处理布局、样板代码,为您创建和管理GUI控件,并为您提供简单、高效的界面。最重要的是,它将tkinter/Qt/Wx/Remi的控件映射到PySimpleGUI元素。最后,它用我们自己的事件循环替换了GUI的事件循环。
您已经看到了代码的示例。这一切的最大好处是,任何人都可以简单地快速创建一个与使用本地GUI框架编写的GUI相匹配的GUI。您可以使用复杂的布局和复杂的元素交互。而且,您为tkinter编写的代码也可以通过更改导入语句在Qt上运行。
如果您想更深入地了解PySimpleGUI的架构,您可以在ReadTheDocs上找到它,与Readme & Cookbook在同一文档中。顶部有一个标签,用于每个文档。
“端口”
正如上述所述,正在发生不同的端口。每个端口都在GitHub的主项目下有自己的位置。它们都有自己的Readme,它是该文档的增强...它们旨在一起使用。
PySimpleGUI作为5个不同的包发布到PyPI。
- PySimpleGUI - tkinter版本
- PySimpleGUI27 - 在2.7上运行的tkinter版本
- PySimpleGUIWx - WxPython版本
- PySimpleGUIQt - PySided2版本
- PySimpleGUIWeb - 网络版本(Remi)
您需要单独安装它们
还有一个名为imwatchingyou
的配套调试器。如果您正在运行PySimpleGUI的tkinter版本,则不需要安装调试器,因为直接嵌入到PySimpleGUI中的版本。
Qt版本
Qt是在tkinter之后的第二个端口。它是除原始PySimpleGUI(tkinter)之外最完整的版本,并且可能会继续成为领跑者。PySimpleGUIQt上所有元素都可用。
如前所述,每个端口都有一个区域。对于Qt,您可以在PySimpleGUIQt GitHub站点上了解更多信息。那里有一个针对Qt版本单独的Readme文件。这对于所有PySimpleGUI端口都适用。
如果您在寻找“更现代”的东西,可以尝试一下。PySimpleGUIQt目前处于Alpha状态。所有控件都可用,但有些可能还没有完整的特性。如果缺少某个控件并且您的项目需要它,请记录一个Issue。这就是新功能诞生的方式。
这里是一个Qt元素的摘要,没有在设计上花费太多精力。这是每个端口“测试工具”的一个示例。如果您运行PySimpleGUI.py文件,您将看到这些测试之一。
如您所见,您有一系列完整的GUI元素可供使用。所有标准元素都在一个窗口中。因此,不要被PySimpleGUIQt几乎不工作或没有很多控件可以选择的错觉所迷惑。您甚至还可以获得两个“Bonus Elements” - Dial
和Stretch
WxPython版本
PySimpleGUIWx GitHub站点。那里有一个针对WxPython版本的单独Readme文件。
PySimpleGUIWx于2018年12月底启动,首个功能是系统托盘图标。这使得该软件包可以与tkinter配合使用,提供完整的程序功能。系统托盘功能已完全实现,运行良好。不久前在企业环境中使用过,问题很少。
窗口代码正在整合,读取操作正常。元素正在定期完成。但遇到了多窗口问题。大约在这个时候,Remi被建议作为移植方案。
Remi(“Web端口”)一夜之间推动了WxPython的努力,Web成为了一号优先任务,并且一直如此。考虑到PySimpleGUI、PySimpleGUIQt和PySimpleGUIWx已经很好地代表了桌面,这些端口之间有一个稳固的窗口系统、两个系统托盘实现和一个几乎功能完整的Qt努力。因此,团队转向了PySimpleGUIWeb。
Web版本(Remi)
PySimpleGUIWeb GitHub站点。Web版本有一个独立的Readme文件。
2019年的新功能,PySimpleGUIWeb。这是一个激动人心的开发!在您的Web浏览器中使用PySimpleGUI!
提供Web功能的底层框架是Python包Remi。https://github.com/dddomodossola/remi Remi提供小部件以及一个用于您连接的Web服务器。这是一个令人兴奋的新平台,暂时提高了WxPython端口的最高优先级。PySimpleGUIWeb是当前的最高优先级项目。
对于没有任何输入设备或显示器连接的Pi项目,请使用此解决方案。以“无头”模式运行Pi,然后通过Web界面访问它。这使得您可以轻松访问并更改Pi,而无需连接任何东西。
这不是为了“提供Web页面”
PySimpleGUIWeb首先是一个GUI,是一个程序的前端。它旨在让单个用户连接并与之交互。
如果同时有超过一个人连接,那么两个用户将看到完全相同的内容,并且将像单个用户使用它一样与程序交互。
Android版本
PySimpleGUI在Android设备上运行,借助PyDroid3应用程序或Termux应用程序。两者都能够运行tkinter程序,这意味着两者都能够运行PySimpleGUI。
要使用PyDroid3,您需要将此导入添加到所有PySimpleGUI程序文件的顶部
import tkinter
这显然会触发PyDroid3,表明应用程序需要使用GUI。
您还希望将窗口的location
参数设置为(0,0)
。
这是一个快速演示,它使用OpenCV2在PyDroid3上运行的窗口中显示您的网络摄像头
import tkinter
import cv2, PySimpleGUI as sg
USE_CAMERA = 0 # change to 1 for front facing camera
window, cap = sg.Window('Demo Application - OpenCV Integration', [[sg.Image(filename='', key='image')], ], location=(0, 0), grab_anywhere=True), cv2.VideoCapture(USE_CAMERA)
while window(timeout=20)[0] is not None:
window['image'](data=cv2.imencode('.png', cap.read()[1])[1].tobytes())
要运行此程序,您需要安装pip安装opencv-python以及PySimpleGUI。
此外,您必须使用PyDroid3的付费版,才能运行OpenCV。与其他事物相比,这个费用很低。电影票会更贵。哪种方式更有趣,看到您的Python程序在您的手机上运行并使用您的手机摄像头,还是正在播放的一些随机电影?从经验来看,Python的选择是赢家。如果你很吝啬,那么你就无法使用OpenCV。不,PySimpleGUI项目和PyDroid3应用程序团队之间没有秘密的商业协议。
源代码兼容性
理论上,您的源代码只需通过更改导入语句就可以从一种平台完全移植到另一种平台。这是目标,而且很多时候这一行更改就足够了。看到您的代码在tkinter上运行,然后将导入更改到import PySimpleGUIWeb as sg
,而不是tkinter窗口,而是在默认浏览器中弹出您的窗口,这是一种令人难以置信的感觉。
但是,请注意。正如您已经看到的,有些端口比其他端口更先进。这意味着当您从一个端口移动到另一个端口时,一些功能可能无法正常工作。如果您有一个精确对齐元素的程序,也可能需要进行一些对齐调整。
假设它工作正常,这意味着跨GUI框架迁移只需付出微小的努力。不喜欢tkinter上GUI的外观?没问题,切换到PySimpleGUIQt试试。已经制作了一个不错的桌面应用程序,但还想将其带到网络上?同样没问题,使用PySimpleGUIWeb。
repl.it版本
想要真正震撼你的心灵吗?看看这个在你的网络浏览器中运行的PySimpleGUI程序。
多亏了repl.it和Remi的神奇之处,我们可以在浏览器窗口中运行PySimpleGUI代码,而无需在您的计算机上运行Python。这应该被视为一种教学和演示辅助工具。它并不是用来提供网页的方式。由于每个用户都会分叉并得到一个完全不同的工作空间,所以它无论如何都无法工作。
在repl.it上运行有两个PySimpleGUI端口 - PySimpleGUI和PySimpleGUIWeb。
PySimpleGUI(基于tkinter)
主要的PySimpleGUI端口在repl.it上运行得非常好,因为他们出色地将tkinter运行在这些虚拟机上。从头开始创建程序,您将想要选择“带有tkinter的Python”项目类型。
渲染窗口的虚拟屏幕大小并不是非常大,因此请注意您窗口的大小,否则您可能会遇到无法到达的按钮。
您可能需要为您的项目“安装”PySimpleGUI包。如果它没有自动为您安装,那么请点击浏览器窗口左侧的立方体,然后输入PySimpleGUI或PySimpleGUIWeb,取决于您正在使用哪个。
PySimpleGUIWeb(基于Remi)
对于使用repl.it运行的PySimpleGUIWeb程序,将自动从PyPI下载并安装最新的PySimpleGUIWeb到虚拟Python环境中。您只需要输入import PySimpleGUIWeb
,您就可以拥有一个运行最新PyPI发布的PySimpleGUIWeb的Python环境。
从头开始创建repl.it项目/故障排除
要从头开始创建自己的repl.it PySimpleGUI项目,首先选择您想要的Python虚拟机类型。对于PySimpleGUI程序,请选择“带有tkinter的Python”项目类型。对于PySimpleGUIWeb,请选择常规Python项目。
有时候repl.it没有执行自动导入操作。如果这不起作用,您可以通过点击界面左侧的包按钮,输入包名(PySimpleGUI或PySimpleGUIWeb)来安装包。
为什么这如此酷(老师们,教程编写者请注意)
教育工作者特别应该对此感兴趣。学生不仅可以轻松发布他们的家庭作业供教师访问,教师还可以在线运行学生的程序。无需下载。运行它并检查结果。
对于想要分享代码的人来说,尤其是在帮助他人解决问题时,这是一个绝佳的地方。那些想看到您作品的人不必运行Python或安装PySimpleGUI。
我使用它的方式是首先在Windows上编写我的PySimpleGUI代码,然后将它复制粘贴到Repl.it中。
最后,您可以将这些Repl.it窗口嵌入到网页、论坛帖子等中。分享按钮能够为您提供一段用于“iframe”的代码块,该代码块将在您的页面上渲染为可工作的repl.it程序。这很令人惊叹,但它可能加载较慢。
Repl.it不是您用来“部署”应用程序的Web服务器!
Repl.it并不适合用于提供应用程序和网页。尝试以这种方式使用它不会得到满意的结果。它简单地太慢,界面也太技术化了,不适合尝试“部署”使用。PySimpleGUIWeb在提供网页方面并不是一个好的选择。它的目的更多的是构建在浏览器中运行的GUI。
Mac
令人惊讶的是,Python GUI代码从Windows到Mac再到Linux完全跨平台。无需修改源代码。这适用于PySimpleGUI和PySimpleGUIQt。
从历史上看,PySimpleGUI使用tkinter在Mac上一直存在困难。这是因为Mac上设置按钮颜色的问题。然而,两个事件彻底扭转了这个问题。
- 为Mac使用ttk按钮
- Mac用户可以从python.org安装Python,而不是有按钮问题的Homebrew版本
对于Mac用户来说,这是一条漫长的道路,许多人决定使用PySimpleGUIQt,以便创建多色窗口。想要制作具有色彩的吸引人的窗口是可以理解的。
PySimpleGUI现在可以很好地支持Mac、Linux和Windows。它们都可以使用“主题”,这些主题会自动为您的窗口添加颜色。
请注意,Mac默认使用ttk按钮。您可以在窗口和按钮级别覆盖此设置。如果您从python.org安装了Python,那么您可能可以使用非ttk按钮,如果您愿意的话。
支持
不要默默忍受
GitHub问题被频繁检查。非常频繁。请务必在那里发布您的问题和问题,只有在那里。请不要在Reddit、Stackoverflow、论坛上发布,除非您已经尝试在GitHub上发布。
为什么?它将为您带来最好的支持。其次,您将帮助项目,因为您所经历的可能确实是一个错误,甚至是一个已知的错误。为什么要在已知错误上浪费几个小时呢?
它不是一个超级有问题的包,但用户确实会遇到问题。可能是因为文档中某些内容没有解释清楚。可能你犯了常见的错误。可能该功能尚未完成。
在GitHub上发布问题不会让你显得愚蠢。恰恰相反。
如何记录问题
PySimpleGUI是一个活跃的项目。经常修复错误,增加功能。如果您遇到麻烦,请在GitHub网站上 打开一个问题,您将获得帮助。在StackOverflow、论坛、邮件列表、Reddit等地方发布问题不是获得支持的最快途径,这样做可能非常容易让您误入歧途,因为不熟悉该包的人很难帮助您。您还可能遇到常见的回应:“我不知道PySimpleGUI(也许因此不喜欢它),但我知道您可以用Qt做到这一点”。
为什么只有一个位置?很简单……它是跟踪错误、增强等功能的地方。这是该项目的互联网上唯一的位置。它不是一个控制人们如何做事的怪异生物。这是为了让您获得最佳和最快的支持。
因此,打开一个问题,选择“自定义表单”并完整填写。所有这些问题都有很好的原因。走捷径只会减少您获得帮助的机会,以及获得高质量帮助的机会,因为远程调试本身就非常困难。不要因为信息不足而阻碍那些想要帮助的人。
请务必在您的IDE之外运行您的程序 首先。使用python
或python3
命令从shell启动您的程序。在许多情况下,我们花费了大量时间追踪由IDE引起的问题。通过从命令行运行,您可以将整个问题排除在外,这是重要的一步。
不要坐以待毙,一次又一次地尝试相同的事情,直到您恨透生活... 停下来,并在GitHub上发布一个问题。有人一定会回答您。支持已包含在购买此包的价格中(遗憾的是,质量水平也与价格相符)。只是当您发现免费支持有点糟糕时,不要太过沮丧,但它是免费的,并且通常提供好的建议。
PySimpleGUI的捣乱者
是的,他们就在那里。我永远也想不到会有人反对这个包,尤其是来自一小部分小而声音大的群体。我天真地认为每个人都会支持的,看到价值,围坐在火炉旁,唱歌,至少要诚实。但,这不是堪萨斯,互联网是...
如果有人正在积极劝您不要使用这个包,那么请知道您正在走正确的路,您应该试一试。这种事情有时会发生,因为这个人可能为特定的公司工作,或者他们有自己的GUI包......这并不受欢迎,或者他们喜欢拆东西,我不知道...人们可以真的很奇怪和情绪化。
我保证您不会因此毁了一生。这不会让您成为一个有坏习惯的糟糕程序员。它不会毁掉您的职业生涯。它不会教会您坏习惯。我认识的一个人的奖金是基于他写的PySimpleGUI程序。
那么成功是否是目标呢?花时间润色您的GUI并专注于您的核心代码,而不是在Qt库的文档堆中摸爬滚打,试图设置某个东西的颜色。如何让您的程序完成、运行并投入使用呢?
从PySimpleGUI开始,然后将来如果您想直接在Qt中编码,您的PySimpleGUI知识并不会让您无法学习其他东西。因为您已经学会了使用for
循环,所以无法编写while
循环?这似乎是逻辑。
实际上,您会比大多数刚开始的人拥有更多的知识,因为您已经构建了工作GUI,可能很多,并理解如何布局高效的界面,以及良好的GUI小部件教育和它们是如何工作的。
以下是一些可能正在起作用的因素......这个捣乱者已经编程了一段时间,并且真的了解这些GUI框架。可能投入了大量时间学习它们,因此有一些可销售技能(是的,跟着钱走)。
进入自大的高中生或使用PySimpleGUI的第一年程序员,他们能够轻松地制作出看起来与Sir Troll过去用来赚取大笔费用的窗口几乎相同的GUI窗口。以前只有少数人能做的技能,现在有成千上万、十万甚至一百万人能够做,更快更简单。真糟糕,先生。真糟糕。
“编写GUI应该是困难的”是一个提供帮助让初级程序员学习Qt的人列出不使用PySimpleGUI的原因。真的吗?它应该很困难。嗯。好吧,在这个Python宇宙里不是这样。也许在C++世界里是这样的??
只要知道您尝试并可能在这个过程中成功是安全的。
目标受众
PySimpleGUI试图解决80%的GUI问题。其他20%直接去tkinter、Qt、WxPython、Remi或满足这一需求的其他工具。这80%是一个巨大的问题空间。
PySimpleGUI中的“简单”指的是其易用性,而不是它解决的问题领域的本质。请注意,人们并不包含在这个描述中。它不是试图为尝试使用它的80%的人解决GUI问题。PySimpleGUI试图解决80%的GUI 问题,不论程序员的经验水平如何。
在Python中文件I/O仅限于某些人吗?启动一个线程、构建一个多线程的Python程序是不是极其困难,以至于需要一年时间来学习?不。这相当简单。就像Python中的大多数事物一样,你从包中导入对象然后使用它。创建并启动一个线程只需要两行Python代码。
为什么显示GUI窗口不能是两行代码呢?Python GUI库有什么特别之处,以至于它们要求你遵循特定的面向对象开发模型?Python的其他部分和包通常不会这样做。
原因是它们并非起源于Python。它们在这个陌生的土地上是个局外人,不得不“适应”。它们最初是C++程序/SDK,现在仍然是。它们只是在上面贴了一层Python的“外皮”,但这并没有让它们与语言更好地融合。
PySimpleGUI是为初学者和经验丰富的开发者设计的。为什么?因为两者都喜欢紧凑的代码。大多数人,我们只是想完成工作,对吧?为什么不按照Python大多数工作方式来做呢?
初学者可以在Python教育的第一周就开始使用GUI。专业人士可以立即深入使用各种元素和它们的功能来构建像数据库应用程序这样的东西。
这是一个很好的例子,说明PySimpleGUI如何服务于这两组人……InputText
元素有16个潜在参数,但你会发现初学者只设置了0个或1个参数。看看这份文档中的所有示例,你会看到代码片段只使用了潜在参数/设置的很小一部分。简单……默认情况下保持简单。这是PySimpleGUI使命的一部分。
一些开发者对现有的GUI框架架构(Qt、WxPyton、tkinter)非常忠诚。他们喜欢现有的GUI架构(它们都大致相同,只是这一个不同)。如果你是这群人中的一员,加入街角下的“20%俱乐部”吧。那里有很多空间,有很多可能的解决方案。
但是,让我们来做一些开放心态的练习。也许你甚至会提出一个有趣的建议,即使你不用它。也许PySimpleGUI做了某些事情,激发你直接在Qt中编写类似的东西。而且,请至少保持礼貌。有空间容纳多种架构。记住,写一些PySimpleGUI代码就像写一些tkinter或Qt代码一样,不会伤害你。你感到受到伤害的可能性更大的是那两个之一。
初学者 & 更简单的程序
有几个原因会让初学者停下来看看。第一个是简单地将一个简单的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可以让你轻松编写代码,但这并不意味着它会神奇地将如何使用它的知识填入你的脑海。内置的docstrings有帮助,但它们只能走这么远。
搜索这份文档就像按Ctrl + F一样简单。
这份文档位于GitHub主页上,作为readme。 http://www.PySimpleGUI.com 将带你去那里。如果你喜欢左侧有目录表的版本,那么你应该去 http://www.PySimpleGUI.org 。
PySimpleGUI,以开发者为中心的模型
你可能认为,这些关于PySimpleGUI专门为了使你的生活更轻松、比替代方案更有趣的断言都是胡说八道……尤其是在阅读了上述关于阅读本手册的部分之后。
心理战
洗脑。要知道,有一个积极的运动旨在让你成功使用PySimpleGUI。吸引你并让你继续工作直到满意的是通过工作来激活你大脑中的多巴胺。是的,你是PySimpleGUI的老鼠,按下那个会掉下食物奖励(即运行的程序)的杆。
这种方法是通过给予你一次又一次的成功,并且间隔非常短。为了使这发挥作用,你所做的一切都必须有效。你运行的代码必须有效。对你的程序进行小的更改,然后一遍又一遍地运行它,而不是尝试进行一大堆大的更改。一次转动一个旋钮,你就会没事的。
找到你的IDE运行当前显示程序的快捷键,以便运行代码只需要一个按键。在PyCharm中,运行你看到的内容的键是Control + Shift + F10。一次按下这么多键太麻烦了。我在键盘上编程了一个热键,当我按下它时,它会发出那个键组合。结果是单个按钮运行。
工具
这些工具是为了帮助你实现这种小小的成功之流的。
- 这份readme及其示例代码片段
- 食谱 - 复制、粘贴、运行、成功
- 演示程序 - 复制这些小程序,让你有一个即时的起点
- 在IDE中显示的文档(docstrings)意味着你不需要打开任何文档就可以获取每个元素和函数调用可用的全部选项
PySimpleGUI的初始“启动并运行”部分应不超过5分钟。目标是5分钟从你的决定“我试试”到屏幕上出现你的第一个窗口“哇,竟然这么容易?!”
PySimpleGUI的主要学习路径是
- 这份readme文档超过100页的PySimpleGUI用户手册
- 食谱 - 快速入门的配方
- 演示程序 - 从这些运行解决方案中的一个开始修改
- YouTube视频 - 如果你喜欢教学视频,有15+个视频
所有这些都是为了给你一个“快速启动”,无论是食谱还是演示程序。想法是给你一个运行的程序,让你对其进行修改。作为开发者,这可以节省大量时间。
您从一个工作程序开始,屏幕上有一个图形用户界面(GUI)。然后就可以开始了。如果您弄坏了某些东西(正如Bob Ross所说,“一个愉快的意外”),您总是可以回退到已知的正常工作点。
高比例的用户报告说,他们在一天之内就学会了PySimpleGUI并完成了他们的项目。
这不是一个罕见的事件,也不是吹嘘。GUI编程按照定义并不一定困难,PySimpleGUI确实使其更容易接近和更简单(更不用说更简单了)。
但是,当您进入新的、未知领域时,需要查看这份文档。不要猜测……或者更具体地说,不要猜测,当它不起作用时,就放弃。
这份Readme和Cookbook
readme和Cookbook等最好在ReadTheDocs上查看。最快的办法是访问:http://www.PySimpleGUI.org
您将被自动转到正确的目的地。ReadTheDocs上有多个标签页。一个用于主readme,另一个用于Cookbook。那里还有其他文档,如架构设计文档。
Cookbook大约有27个“食谱”或简短的程序,可以轻松复制和粘贴。
演示程序
GitHub仓库有演示程序。有些是为纯PySimpleGUI构建的,通常可以移植到其他版本的PySimpleGUI。还有一些与其中一个端口相关联。到达GitHub的最简单方法是:
截至本文撰写时,2019年7月10日,有177个演示程序可供您选择。
这些程序向您展示了如何使用元素,特别是如何将PySimpleGUI与一些流行的开源技术集成,例如OpenCV、PyGame、PyPlot和Matplotlib等。
主文件夹中的许多演示程序可以在PySimpleGUI的多个端口上运行。还有针对特定端口的演示程序。您将在端口文件夹中找到它们。因此,Qt特定的演示程序在PySimpleGUIQt文件夹中。
快速浏览
在我们深入了解细节之前,让我们先快速浏览一下PySimpleGUI。PySimpleGUI有两种级别的窗口支持 - 高级和定制。
高级调用是那些为您做很多工作的调用。这些不是定制窗口(另一种与PySimpleGUI交互的方式)。
让我们使用这些高级调用中的一个,即Popup
,用它来创建我们的第一个窗口,必选的“Hello World”。这是一行代码。您可以使用这些调用,添加尽可能多的参数和类型。
import PySimpleGUI as sg
sg.Popup('Hello From PySimpleGUI!', 'This is the shortest GUI program ever!')
或者一个自定义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()
简单的美丽
有一天我会找到合适的词语,它们将是简单的。 —— 杰克·凯鲁亚克
像上面的例子一样,您可以将事物压缩成一行,但这不是可读的。让我们添加一些空白,这样您就可以看到PySimpleGUI代码的美丽
。
花一点时间看看下面的代码。您能“看到”窗口正在查看layout
变量,知道每一行代码代表一个元素的行吗?窗口中有3行元素,有3行代码定义了它。
创建和读取窗口的用户输入占据了最后两行代码,一行用于创建窗口,最后一行显示窗口给用户并获取输入值(他们点击了哪个按钮,在输入元素中输入了什么)
import PySimpleGUI as sg
sg.theme('Dark Blue 3') # please make your creations colorful
layout = [ [sg.Text('Filename')],
[sg.Input(), sg.FileBrowse()],
[sg.OK(), sg.Cancel()]]
window = sg.Window('Get filename example', layout)
event, values = window.Read()
window.close()
与其他GUI SDK不同,你很可能理解了你刚刚读到的每一行代码,即使你还没有阅读这份文档中关于如何在布局中编写元素的任何说明。
你不需要编写任何讨厌的类,也不需要担心回调函数。使用PySimpleGUI显示带有文本、输入区域和2个按钮的窗口,不需要这些。
同样的代码在tkinter中要长5倍,我猜你不会想只读一遍就能理解它。当你阅读代码时,你是否注意到没有任何注释,但你仍然能凭借直觉理解。
你在PySimpleGUI的每个角落都能找到这种简单性。这不仅是一种思维方式,也是一种架构方向。记住,开发者先生/女士,你是这个包的中心。因此,从你的角度来看,当然一切都应该看起来和感觉起来都很简单。
不仅如此,这是Python风格的做法。看看“Python之禅”的第3行。
“Python之禅”,由Tim Peters所著
美丽胜于丑陋。明确胜于隐晦。简单胜于复杂。复杂胜于复杂。扁平胜于嵌套。稀疏胜于密集。可读性很重要。特殊案例不足以打破规则。尽管实用性胜于纯净。错误绝不应该默默无声。除非明确地被抑制。面对歧义,拒绝猜测的诱惑。应该有一个——最好是唯一的——明显的方法来做这件事。虽然一开始可能不明显,除非你是荷兰人。现在比从来没有好。尽管“现在”通常不如“永远”好。如果实现难以解释,那是个坏主意。如果实现易于解释,那可能是个好主意。命名空间是一个绝妙的想法——让我们多做一些吧!
我只希望阅读这些页面的文档能让你相信我们在打破建议
如果实现难以解释,那是个坏主意。如果实现易于解释,那可能是个好主意。
我认为PySimpleGUI不难解释,但我正努力全面解释它,这样你就不会这样做
面对歧义,拒绝猜测的诱惑。
有时你可以猜测并且没事。有时,事情可能会工作,但副作用可能很大。可能有更好的方法来解决问题——在GitHub上提交一个问题吧!
一些例子
打磨你的窗口 = 构建“美丽的窗口”
而且“Python之禅”仍然适用
美丽胜于丑陋。
但这也适用
尽管实用性胜于纯净。
找到对你来说适用的平衡。
“但tkinter很糟糕”“它看起来像20世纪90年代”(这句话常常是那些90年代之前就去世的人说的)“哪种Python GUI SDK可以让我的窗口看起来很美?”(至少每两周在Reddit上都会有人问这个问题)
下面的窗口全部都是使用PySimpleGUI制作的,tkinter版本,它们看起来足够好,不会被简单地嘲笑和忽视。记住,开发者,你对你的应用程序的外观和操作有很大的影响。你当然不能把所有责任都推到你所使用的GUI上。
Reddit上有许多帖子询问哪种GUI会导致“美丽的窗口”,好像有一个魔法GUI库会为你美化一切。PySimpleGUI中确实有一些调用可以帮助你。例如,你可以通过一个调用“改变外观和感觉”,这样就可以加载预定义的色彩调色板,让你的窗口可以立即获得一些颜色并匹配。
美丽的窗口是创造出来的,而不是简单给予你的。有人设计并创作用户界面的艺术品,你知道这一点吗?艺术家绘制按钮,将艺术品包含在窗口中以使其更美观。
其中一些已经“抛光”过,其他如Matplotlib示例则更像是功能示例,以向您展示它的工作情况。
这个棋类程序能够运行多个AI棋类引擎,是由另一位用户使用PySimpleGUI编写的。
这个下载器可以下载文件以及YouTube视频和元数据。如果你担心多个窗口同时工作,不用担心。担心你的项目对PySimpleGUI来说“太多”或“太复杂”?如果你想的话,先进行初步评估。看看别人都做了什么。
如果你的程序有2或3个窗口,你担心吗?下面你会看到11个窗口打开,每个窗口都独立运行,每个窗口有多个标签页,进度条也在同时更新。
仅仅因为你不能匹配一双袜子,并不意味着你的窗口都必须是相同的灰色。从100多种不同的“主题”中选择。只需添加一行调用theme
的代码,就可以立即将窗口从灰色转变为更直观的交互式界面。如果你将主题名称拼写错误或指定了一个不在允许名称表中的主题名称,那么将为你随机分配一个主题。谁知道呢,你可能会喜欢这个随机选择的主题,并想要用它来代替你的原始计划。
在PySimpleGUI 4.6版本中,主题数量从几十个大幅增加到100多个。要使用以下窗口中显示的颜色方案,请将调用theme('主题名称')
添加到您的代码中,传递所需的颜色主题名称。要查看此窗口和您软件版本中可用的主题列表,请调用函数theme_previewer()
。这将创建一个具有以下框架的窗口。它将向您展示PySimpleGUI版本中确切可用的内容。
在4.9版本中又增加了32种颜色主题...以下是当前的选择
创建看起来美观的、半透明(部分透明)的Rainmeter风格桌面小工具,在后台运行。
想要构建一个填字游戏?没问题,为你提供了绘图原语。
有内置的绘图原语
这是一个集成YOLO机器学习程序的框架,该程序能够实时进行物体识别,同时允许用户通过图像下的滑块调整算法设置。由于AI和GUI技术融合的难度,这种与AI算法的交互性仍然很少见。现在这不再困难。这个程序不到200行代码。
π窗口
你可能正在寻找一种更友好的方式来与你的Raspberry Pi交互。你的PySimpleGUI代码可以在Pi上无缝运行。Tkinter在Pi平台上依然健在。以下是一些在Pi上显示的元素选择。你可以在Pi上获得与Windows和Linux相同的元素。
你可以添加自定义艺术品来使其看起来更美观,就像这张图片中显示的Demo程序——天气预报一样。
关于Pi窗口,要注意的一点是你不能使它们半透明。这意味着Window.Disappear
方法将不起作用。你的窗口不会消失。设置Alpha通道将没有任何效果。
别忘了你可以在任何地方使用自定义艺术品,包括在Pi上。天气应用程序在Pi上看起来很漂亮。注意没有按钮或其他正常外观的元素可见。即使在低端平台上,也可以构建看起来很棒的应用程序。
游戏
只需使用类似于这个乒乓球游戏的内置 PySimpleGUI 图形原语,就可以创建一些很酷的游戏。PyGame 也可以嵌入到 PySimpleGUI 窗口中,并提供代码演示如何实现。还有使用 pymunk 物理包的演示,这个包也可以用于游戏。
使用 PySimpleGUI 对游戏探索得还不够。
看起来像 Windows 程序的 Windows 程序
你想和部门里的其他人或朋友和家人分享你的代码吗? 他们中很多人可能电脑上没有 Python。在企业环境中,可能无法在你的电脑上安装 Python。
PySimpleGUI + PyInstaller
来救场!!
将 PySimpleGUI 与 PyInstaller 结合使用可以创建真正非凡和特殊的东西,一个看起来像 Windows WinForms 应用程序的 Python 程序。
下面的应用程序包含一个可工作的菜单,仅用 20 行 Python 代码创建。它是一个单独的 .EXE 文件,可以直接启动到您看到的屏幕。还有更多好消息,任务栏上您看到的唯一图标是窗口本身...没有讨厌的壳窗口。不错,对吧?
使用简单的 GUI,将 .py 文件与 Windows 上的 Python 解释器“关联”变得实用。双击一个 py 文件,就会弹出一个 GUI 窗口,这比打开 dos 窗口并输入命令行要愉快得多。
甚至还有一个 PySimpleGUI 程序,可以将您的 PySimpleGUI 程序转换为 EXE。它很方便,因为您可以使用 GUI 选择文件,所有的输出都会实时显示在程序的窗口中。
背景 - 为什么 PySimpleGUI 诞生
如果您不想了解背后的故事和决策原因,可以随意跳过这部分。
有一个项目悬而未决,需要一个 GUI。它不是一个非常复杂的 GUI,因此开始了寻找一个简化 GUI 包的过程,这样我就可以更容易地使用 tkinter。我找到了几个,它们也很受欢迎,但它们缺少完整的 Widget 组合,并且无法使用这些 Widget 定义自己的窗口。
一个疯狂的想法出现在脑海中...如果我写一个简化 GUI,然后使用它来编写我的应用程序会怎么样。这将大大减少代码量,编写应用程序也会变得“容易”。这正是所做的一切。
首先编写了一个 PySimpleGUI 的早期版本,它包含了今天可用的元素子集。它正好足够我的应用程序使用。然后我在 PySimpleGUI 中编写了我的应用程序。
因此,PySimpleGUI 应运而生,是必要的他人帮助其发展成今天的包。没有社区的帮助,它将不会变得一半那么好。
PySimpleGUI 完成后,就到了开始工作于“端口”的时候了。当然,还有这个文档。
非面向对象和非事件驱动的模型
对于初学 Python 的学生来说,与 GUI 相关的两种“高级概念”是使用类和回调以及它们相关的通信和协调机制(信号量、队列等)。
如何使 GUI 接口足够简单,以便让第一周的 Python 学生使用?
这意味着可以使用类来构建和使用它,但类不能是用户编写的代码的一部分。当然,可以使用面向对象的设计与 PySimpleGUI 一起使用,但这不是一个 要求。示例代码和文档大部分避免在用户空间中编写新类。
那些讨厌的回调怎么办?对于初学者来说,它们很难理解,处理起来也有些头疼。PySimpleGUI 解决事件的方式是利用 “消息传递”架构。
不是在发生某些事件时调用用户函数,而是在用户调用函数 Window.Read()
时将信息“传递”给用户。
一切 都通过这个 Window.Read
调用返回。当然,底层的GUI框架仍然执行回调,但它们都在 PySimpleGUI 内部发生,并转换为消息传递给您。
所有样板代码、事件处理、小部件创建、包含小部件的框架等,都是与您直接在 tktiner、Qt 等 中编写的完全相同的对象和调用。所有这些代码都为您准备好了,那么您剩下的任务就是使用用户输入的信息做些有用的事情。毕竟,这才是这里的目标.... 获取用户信息并对其做出反应。
通过 PySimpleGUI 元素,您可以使用完整的 Widget 组合。而且这些 Widget 以独特和有趣的方式呈现给您。
如果您想了解更多关于 PySimpleGUI 架构的信息,请查看位于 ReadTheDocs 的架构文档。
结果
一个吸引广泛用户群体、高度可定制、易于编程、稳定(几乎没有错误和很少崩溃)的 GUI。
PySimpleGUI 越来越受欢迎。安装数量和成功案例每天都在增长。在存在的第一年,Pip 安装量就超过了 350,000。每天有超过 300 人访问 GitHub,该项目已有 1,800 个 star(感谢你们棒棒的用户!)
端口数量已达到 4。与其他技术的集成正在不断扩展。现在是尝试 PySimpleGUI 的好时机!您最多只会失去 5 到 10 分钟的时间。
然而,当处理未完成的端口时,需要谨慎。PySimpleGUI,tkinter 版本,是唯一完全完成的端口。Qt 接下来。它的所有元素都已完成,但并非每个元素的每个选项都已完成。PySimpleGUIWeb 按完成度顺序排在 PySimpleGUIWx 之后。
功能
尽管使用简单,但 PySimpleGUI 有着显著的深度,可供更高级的程序员探索。功能集远远超出了初学者程序员的需求,并深入到复杂多窗口 GUI 所需要的功能。
对于那些听说 PySimpleGUI 只适用于制作最简单的 GUI 的人,这个功能列表应该可以打破这个神话。PySimpleGUI 的 简单 并不是指您编写的程序有多复杂,而是指您编写 GUI 时所付出的努力。它是“简单”的... 并不仅限于简单问题。
PySimpleGUI 的功能包括
- 支持 Python 版本 2.7 和 3
- 文本
- 单行输入
- 包括以下类型的按钮
- 文件浏览
- 文件浏览
- 文件夹浏览
- 另存为
- 返回事件的普通按钮
- 关闭窗口
- 实时
- 日历选择器
- 颜色选择器
- 按钮菜单
- TTK 按钮或“普通”TK 按钮
- 复选框
- 单选按钮
- 列表框
- 选项菜单
- 菜单栏
- 按钮菜单
- 滑块
- 旋转器
- 旋钮
- 图形
- 带标题的框架
- 图标
- 多行文本输入
- 可滚动的输出
- 图像
- 表格
- 树
- 异步/非阻塞窗口的进度条
- 标签窗口
- 拆分窗口
- 持久窗口
- 多窗口 - 同时可以打开无限数量的窗口
- 将 Python 输出/错误重定向到滚动窗口
- “高级”API(例如 MessageBox、YesNobox 等)
- 单行进度条 & 调试打印
- 完全控制颜色、外观和感觉
- 选择预定义调色板
- 按钮图像
- 水平和垂直分隔符
- 以字典形式返回值
- 设置焦点
- 将回车键绑定到按钮上
- 将小部件分组到一列中,并将其放置在窗口的任何位置
- 可滚动列
- 键盘低级键捕获
- 鼠标滚轮支持
- 获取选中的列表框值
- 获取滑块、旋转框、组合框的当前值
- 在实时窗口中更新元素
- 批量窗口填充操作
- 保存/加载窗口到/从磁盘
- 无边框(无标题栏)窗口(非常时尚的外观)
- 总在最上面的窗口
- 带ALT热键的菜单
- 右键点击弹出菜单
- 工具提示
- 可点击文本
- 透明窗口
- 可移动窗口
- 动画GIF
- 无需异步编程(无需担心回调)
- 内置调试器和REPL
- 用户可以通过直接访问底层GUI框架小部件来扩展
设计目标
以开发者为中心,一切的中心,始终保持这种心态很重要,包括现在,今天。这为什么这么重要?因为这个包是为了让Python应用程序的宇宙可以增长,并且可以让每个人都参与到GUI的大帐篷中来。
5分钟内完成
成功#1必须立即发生。安装并运行您的第一个GUI程序。目标是五分钟。Pip安装不到一分钟。根据您的IDE和开发环境,运行您的第一段代码可能只需要复制、粘贴和运行。这不是一个玩笑的目标;这是真正的目标。
初学者和高级开发者一起
设计一个界面,让完全的初学者可以理解和使用,同时又有足够的深度,让高级程序员可以制作一些非常漂亮的GUI,而不会觉得自己在玩“玩具”。
成功接踵而至
成功接踵而至……这是赢得开发者人心的模式。这是用户喜欢PySimpleGUI的原因。以您可以经常运行和测试代码的方式开发。添加一点,运行它,看到屏幕上的结果,微笑,继续前进。
复制、粘贴、运行。
食谱和演示程序都是为了实现这个目标。首先让用户在屏幕上看到类似他们想要创建的GUI的示例。
如果您想尝试OpenCV,请下载OpenCV演示程序并尝试它们。如果您正在尝试将OpenCV包集成,在GUI窗口中看到您的摄像头运行是非常令人兴奋的。
"噗"立即运行基于OpenCV的应用程序==快乐的开发者
创建比预期更简单的界面
单行进度条是一个很好的例子。它只需要一行代码。将输出打印到调试窗口就像将print
替换为sg.Print
一样简单,这将把您的控制台输出路由到滚动调试窗口。
Pythonic
Pythonic...
这对我来说很难定义。实现PySimpleGUI的代码并不符合PEP8规范,但它是一致的。重要的是用户在编码时看到和体验到的,而不是实现代码中命名约定的选择。PySimpleGUI的用户界面现在有一个符合PEP8规范的界面。方法现在是蛇形命名法(除了保留旧的驼峰命名法名称)
我将其定义为-尝试以自然的方式使用语言构造,并利用Python的一些有趣特性。Python的列表和可选参数使PySimpleGUI运行顺畅。
以下是PySimpleGUI的一些Python友好特性
- 窗口表示为Python元素的列表
- 返回值是一个“事件”,如按钮点击和一个包含输入值的列表/字典
- SDK调用可以简化为单行Python代码,展示自定义GUI,并在需要时返回值
- 元素都是类。用户可以通过类方法与元素交互,但不需要自己编写类。
- 允许键和其他标识符采用任何您想要的格式。不要无谓地限制用户使用特定类型。
- 虽然有些人不同意单源文件,但我认为其好处远远大于弊端。
宏伟目标
教初学者GUI编程
总的来说,PySimpleGUI是一个“基于模式的”SDK。初学者可以复制这些标准设计模式或示例程序,并对其进行修改,而不必 necessarily理解所有细节。例如,他们可以通过添加元素来修改布局,即使他们可能还没有完全理解布局的列表列表概念。
初学者当然可以在复制的设计模式中添加更多 if event == 'my button':
语句到事件循环。他们不需要编写类就可以使用这个包。
吸引新晋图形设计师和非程序员
希望对图形设计感兴趣的初学者,在参加Python课程时,将有一个简单的方式来表达自己,从他们Python体验的开始。即使他们不是最好的程序员,他们也可以轻松地展示定制的GUI布局、颜色和艺术品。
填补GUI空白(民主化GUI)
Python GUI解决方案中存在一个明显的空白。填补这个空白,谁知道会发生什么。目前,要使用tkinter、Qt、WxPython和Remi创建传统的GUI窗口,需要超过一周或一个月的Python教育。
这对于初学者来说遥不可及。通常远远遥不可及。然而,时间一次又一次,自称“刚开始”学习Python的初学者会在论坛或Reddit上请求GUI包推荐。有9成的人推荐Qt。(用手拍头)。多么浪费字符。你不妨直接告诉他们,“放弃吧”。
有“那里”吗?
也许没有“那里”。或者也许一个简单的GUI API将使Python能够像其他许多领域一样统治另一个计算学科。这是尝试找出答案的一次尝试。到目前为止,看起来这个领域确实有很多需求。
开始使用PySimpleGUI
如果您遇到真正的问题,此文档末尾有一个“故障排除”部分。它将详细介绍您可以做什么来帮助自己。
安装PySimpleGUI
当然,如果您正在安装用于Qt、WxPython、Web,您将使用PySimpleGUIQt、PySimpleGUIWx和PySimpleGUIWeb代替以下说明中的直接PySimpleGUI。您应该已经安装并可能测试了底层GUI框架。这包括tkinter、PySide2、WxPython、Remi。
在Python 3上安装
pip install --upgrade PySimpleGUI
在某些系统上,您需要运行pip3。(Linux和Mac)
pip3 install --upgrade PySimpleGUI
在Raspberry Pi上,这应该可以工作
sudo pip3 install --upgrade pysimplegui
一些用户发现,升级需要使用pip的额外标志 --no-cache-dir
。
pip install --upgrade --no-cache-dir PySimpleGUI
在某些Linux版本中,您需要首先安装pip。需要先得到“鸡”才能得到“蛋”(明白了吗?蛋?)
sudo apt install python3-pip
tkinter
是PySimpleGUI的要求(唯一的要求)。一些操作系统变体,如Ubuntu,并没有预装tkinter
。如果您收到类似于以下错误的错误
ImportError: No module named tkinter
那么您需要安装tkinter
。
对于python 2.7
sudo apt-get install python-tk
对于python 3 sudo apt-get install python3-tk
有关安装tkinter的更多信息,请在此处查看: https://www.techinfected.net/2015/09/how-to-install-and-use-tkinter-in-ubuntu-debian-linux-mint.html
为Python 2.7安装
重要 PySimpleGUI27 将于 2019 年 12 月 31 日从 GitHub 上消失。请至少迁移到 3.6 版本。对大多数人来说,这并不痛苦。
pip install --upgrade PySimpleGUI27
或 pip2 install --upgrade PySimpleGUI27
您可能还需要安装 "future" 以支持 2.7 版本
pip install future
或 pip2 install future
如上所述,您可能需要安装 pip 或 tkinter。在 Python 2.7 中执行此操作
sudo apt install python-pip
sudo apt install python-tkinter
测试安装和故障排除
安装后,或者将 .py 文件复制到您的应用程序文件夹中,您可以使用 Python 来测试安装。在命令提示符中启动 Python。
快速测试
从您的命令行输入:python -m PySimpleGUI
当然,如果您使用 Linux/Mac 并且需要使用 python3
命令来运行,则当然输入该命令。
这将显示与这些说明相同的窗口
测试 Python 2.7 的说明
>>> import PySimpleGUI27
>>> PySimpleGUI27.main()
测试 Python 3 的说明
>>> import PySimpleGUI
>>> PySimpleGUI.main()
您将看到一个 "测试工具包",它会测试 SDK,告诉您版本号,并允许您尝试
找出 PySimpleGUI 的来源
对于您来说,确定您的代码来源以及您正在运行的版本至关重要。
有时在调试时,会产生疑问,具体是哪个 PySimpleGUI 正在运行。快速找出这个问题的方法再次是从命令行运行 Python。这次您将输入
>>> import PySimpleGUI as sg
>>> sg
当您输入 sg 时,Python 将告诉您 PySimpleGUI 文件 / 包的完整路径。这是调试时非常重要的信息,因为很容易忘记您在某处有一个旧的 PySimpleGUI 复制。
从您的代码中找出 PySimpleGUI 的来源
如果您继续遇到加载正确版本 PySimpleGUI 的问题,确定您的程序从哪里获取 PySimpleGUI 的 最终 方法是在您的程序中添加一个打印语句。这很简单!您还可以通过打印来获取您正在运行的版本
import PySimpleGUI as sg
print(sg)
print(sg.version)
就像使用 REPL >>> 来确定位置一样,您的代码中的这个 print
将显示相同的路径信息。
手动安装
如果您在目标机器上未连接到网络,或者 pip 不起作用,或者您想从 GitHub 运行最新代码,那么您只需要将单个 PySimpleGUI 源文件 PySimpleGUI.py
(对于 tkinter 端口)放入您的应用程序文件夹中(导入 PySimpleGUI 的 py 文件所在的文件夹)。您的应用程序将加载此本地 PySimpleGUI 复制,就像它是一个包一样。
务必 在您安装更新的 pip 版本时删除此 PySimpleGUI.py 文件。通常事件顺序是您报告的 bug 已修复并提交到 GitHub。您下载 PySimpleGUI.py 文件(或适用于您的端口的相应名称)并将其与您的应用程序一起使用。然后后来,您的修复与新的发布一起发布到 PyPI。在您从 pip 安装之前,您想要删除 GitHub 上的那个。
先决条件
Python 2.7 或 Python 3 tkinter
PySimpleGUI 在所有具有 tkinter 运行的 Python3 平台上运行。它已在 Windows、Mac、Linux、Raspberry Pi 上进行了测试。甚至可以在 pypy3
上运行。
创建 EXE 文件
如果您希望从您的 PySimpleGUI 应用程序创建 EXE 文件,则需要安装 PyInstaller
。有关创建 EXE 的说明在本文档底部。
IDE
很多人询问关于集成开发环境(IDE),很多人甚至害怕PyCharm。请注意……与您学习Python的旅程相比,学习使用PyCharm作为IDE简直微不足道。这通常需要一天的时间(1到8小时)。或者,如果您真的是个新手,可能需要一周的时间来适应。所以,我们不是在说您需要学习如何展开双臂飞翔。
总结一下那段话,别像个小女孩一样抱怨。您是个成年人,表现得像个成年人。“但是很难……”如果您找到了这个包,那么您是个聪明人 :-) 真的,对自己有点信心……我对您有信心。我不会把您引到悬崖边,我保证!
一些IDE提供虚拟环境,但这不是必需的。PyCharm就是一个例子。对于这些,您可以使用它们的图形用户界面(GUI)添加包,或者使用它们内置的终端进行pip安装。不建议初学者使用虚拟环境。它们可能会非常令人困惑。然而,如果您是经验丰富的专业开发者并且知道自己在做什么,PySimpleGUI没有什么是阻止您这样工作的。这主要是对初学者的警告,因为他们往往容易搞混和困惑。
官方支持的IDE
许多IDE与PySimpleGUI存在已知问题。IDLE、Spyder和Thonny都存在已知、可证明的问题,结果间歇性或不一致,尤其是在程序退出时,您希望继续使用它。***任何基于tkinter的IDE都将与PySimpleGUI的直通端口有问题。*** 这不是PySimpleGUI的问题。
官方支持的IDE列表是
- PyCharm(当然,这是使用PySimpleGUI的最佳IDE)
- Wing
- Visual Studio
如果您在使用树莓派或其他有限的环境中,那么您可能需要使用IDLE或Thonny。只是要注意,由于都使用tkinter,使用调试器进行调试可能会出现问题。
使用文档字符串(不要跳过这一部分)
从PySimpleGUI的4.0版本开始,tkinter端口为PySimpleGUI程序员打开了一个全新的世界,在那里不再需要参考readme和ReadTheDocs文档。PyCharm和Wing都很好地支持这些文档字符串,我相信Visual Studio也是如此。这为什么很重要?因为它会在您使用包的过程中教会您PySimpleGUI SDK。
不知道InputText
元素的参数和选项?在PyCharm中,这很简单。您可以将PyCharm设置为自动显示关于当前光标所在类的、函数、方法等的文档。您还可以通过按CONTROL+Q手动打开文档。这样做时,您将看到一个类似这样的窗口
注意,我的光标在InputText
上。在屏幕的左侧,InputText
元素的参数不仅显示给您,而且还为您逐一描述,同时显示类型。我的意思是,诚实地说,您还能要求更多什么呢?
好吧,我想您可能希望有一个更小的窗口,只显示您正在输入的参数。好吧,在PyCharm中,当您的光标在( )
之间时,按CONTROL+P。这样做时,您将看到一个类似这样的小窗口
看吧……始终以“开发者”为导向。这是关于您,先生/女士!所以享受您的包吧。
PySimpleGUI的其他端口(Qt、WxPython、Web)尚未更新文档字符串。它们将是下一个要更好地记录的对象。已经开始了工作,以便尽早实现这一点。
使用 - Python 3
在您的代码中使用,只需导入... import PySimpleGUI as sg
然后可以使用“高级”API调用或构建自己的窗口。
sg.Popup('这是我的第一个弹出窗口')
是的,使用Python在屏幕上显示窗口就这么简单。使用PySimpleGUI,创建自定义窗口并不复杂。目标是让您在几分钟内启动GUI,而不是几小时或几天。
Python 3.7
如果必须运行3.7,请尝试3.7.2。它与PySimpleGUI兼容,没有已知问题。
PySimpleGUI与Python 3.7.3和3.7.4+。 tkinter与所有新版本都有问题。例如,表格颜色完全停止工作。不清楚是否有变化导致tkinter API不再工作,这意味着它们不是向后兼容的。这将会非常遗憾。如果是这样,PySimpleGUI需要做更多的工作。
Python 2.7
截至2019年12月31日,PySimpleGUI的Python 2.7版本将从GitHub中删除。抱歉,但旧版Python在这里没有永久的家。安全专家声称,支持2.7对Python社区是一种伤害。我理解为什么。有一些非常特定的情况需要使用2.7。如果您有这样的情况,请尽快复制PySimpleGUI27.py,因为它将永远消失。
方法和函数的PEP8绑定
从PySimpleGUI的4.3版本开始,所有方法和函数调用都有PEP8等效项。目前,这种功能仅在PySimpleGUI的tkinter端口上可用。它正在尽快添加到所有端口。
只要您知道您会短期内坚持使用tkinter,使用新的绑定是安全的。
非PEP8方法和函数
为什么需要这些绑定?简单来说,PySimpleGUI SDK在方法和函数名称中违反了PEP8规范。PySimpleGUI使用驼峰命名法(CamelCase)命名方法和函数。PEP8建议使用snake_case_variables。
这没有引起任何问题,也很少有人抱怨,但确保PySimpleGUI的接口符合规范是很重要的。或许没有人抱怨的原因之一是Qt库也使用SnakeCase来命名其方法。这种做法会使包被标记为“非Pythonic”,并暗示这个包最初是用另一种语言编写的,然后被移植到Python。这正是Qt的情况。它是用C++编写的,接口继续使用C++约定。
PySimpleGUI是用Python编写的,专为Python编写。 名称问题的原因是无知。当PySimpleGUI被设计和实现时,开发者并不了解PEP8约定。
您可以使用这两个名称,而且将能够长期使用。然而,在未来的某个时刻,驼峰命名法将消失。计划开发一个工具,当旧名称从PySimpleGUI中删除时,为开发者进行转换。
帮助系统将使用这两个名称,您的IDE的docstring查看也将使用。然而,找到的结果将显示驼峰命名法。例如 help(sg.Window.read)
将显示方法/函数的驼峰命名法。这将返回以下内容
Read(self, timeout=None, timeout_key='__TIMEOUT__')
重命名约定
要将驼峰命名法的方法/函数名称转换为snake_case,只需在字母大写处放置一个_
。如果没有大写字母,则只更改第一个字母。
Window.FindElement
变为 Window.find_element
类变量
目前,类变量将保持现状。在PySimpleGUI中,类变量被用户代码修改或读取的情况并不常见,因此其对代码的影响在您的代码中很少被看到。
高级API调用 - 弹窗
“高级调用”指的是以“Popup”开头的调用。它们是与用户通信的最基本形式。它们以创建的窗口类型命名,即弹窗。这些窗口旨在短暂存在,要么是传递信息,要么是收集信息,然后迅速消失。
把弹窗想象成您的第一个窗口,有点像您的第一辆自行车。它工作得很好,但功能有限。您可能很快就想要更多的功能,而且它似乎限制了您新发现的冒险感。
当您达到使用弹窗的程度,开始考虑在GitHub上提交“增强问题”,以将新的功能扩展到弹窗调用中,您认为这将非常有帮助……不仅仅是您,还有其他人也是您所想的,对吗?为了他人的利益。
就在这个时候,您应该立即转向名为“自定义窗口API调用 - 您的第一个窗口”的部分。恭喜您,您已经毕业了,不再是官方的“GUI设计师”。哦,别管您只学习了2周Python,现在您是一名真正的GUI设计师了,所以振作起来,开始像个设计师一样行动。
但,现在,让我们继续使用这些单行窗口调用,即弹窗。
弹窗输出
把Popup
调用想象成GUI中的print
语句。这是您在窗口世界中向用户显示结果的方式。每个对Popup的调用都将创建一个新的弹窗窗口。
Popup
调用通常是阻塞的。您的程序将停止执行,直到用户关闭弹窗窗口。异步部分讨论了非阻塞的弹窗窗口。
就像一个print语句一样,您可以传递任何数量的您想要的参数。它们都将被转换为字符串并在弹窗窗口中显示。
有几种弹窗输出调用,每种都有略有不同的外观(例如不同的按钮标签)。
弹窗输出函数列表如下
- Popup
- PopupOk
- PopupYesNo
- PopupCancel
- PopupOkCancel
- PopupError
- PopupTimed, PopupAutoClose
- PopupNoWait, PopupNonBlocking
函数名中Popup之后的尾部表示显示哪些按钮。例如,PopupYesNo
显示带有“是”和“否”按钮的一对按钮。PopupCancel
有一个取消按钮等。
虽然这些是“输出”窗口,但它们也收集以按钮形式输入的数据。Popup函数返回被点击的按钮。如果点击了“确定”按钮,那么Popup返回字符串'确定'。如果用户点击了X按钮关闭窗口,那么返回的按钮值为None
。
PopupTimed
函数或PopupAutoClose
函数是将在一段时间后自动关闭的弹窗窗口。
以下是一个快速参考,展示了Popup调用的外观。
sg.Popup('Popup') # Shows OK button
sg.PopupOk('PopupOk') # Shows OK button
sg.PopupYesNo('PopupYesNo') # Shows Yes and No buttons
sg.PopupCancel('PopupCancel') # Shows Cancelled button
sg.PopupOKCancel('PopupOKCancel') # Shows OK and Cancel buttons
sg.PopupError('PopupError') # Shows red error button
sg.PopupTimed('PopupTimed') # Automatically closes
sg.PopupAutoClose('PopupAutoClose') # Same as PopupTimed
弹窗预览
Popup - 显示包含您希望包含的参数数量的弹窗窗口。这是GUI中的“print”语句的等价物。它也非常适合“暂停”程序流程,直到用户可以阅读一些错误消息。
Popup(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
button_type=0,
auto_close=False,
auto_close_duration=None,
custom_text=(None, None),
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | (任何)变量数量的您的参数。用东西填充调用,看看效果! |
title | (字符串)窗口的可选标题。如果没有提供,则将使用第一个参数。 |
button_color | 元组[str, str] 显示的按钮颜色(文字颜色,按钮颜色) |
background_color | (字符串)窗口的背景颜色 |
text_color | (字符串)文字颜色 |
button_type | (枚举)非用户设置!确定哪些预定义按钮将被显示(默认值 = POPUP_BUTTONS_OK)。有许多弹出功能,它们调用弹出,通过更改此参数以获得所需效果。 |
auto_close | (布尔值)如果为True,则窗口将自动关闭 |
auto_close_duration | (整数)在自动关闭窗口之前保持窗口开启的时间(秒) |
custom_text | Union[Tuple[str, str], str] 要显示在按钮上的文本字符串或字符串对 |
non_blocking | (布尔值)如果为True,则立即从函数返回,而无需等待用户输入。 |
icon | Union[str, bytes] 要在窗口上显示的图标。格式与Window调用相同 |
line_width | (整数)字符宽度。默认为MESSAGE_BOX_LINE_WIDTH |
font | Union[str, tuple(font name, size, modifiers)] 指定字体家族、大小等 |
no_titlebar | (布尔值)如果为True,则不会显示窗口周围的框架和顶部的标题栏 |
grab_anywhere | (布尔值)如果为True,则可以从任何地方抓取以移动窗口。如果no_titlebar为True,则应启用grab_anywhere |
location | Tuple[int, int] 显示窗口左上角屏幕上的位置。默认为窗口居中于屏幕 |
return | Union[str, None] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
其他输出弹出窗口是参数的变体。通常,button_type参数是主要更改的。
其他输出弹出窗口是参数的变体。通常,button_type参数是主要更改的。
button_type的选项是
POPUP_BUTTONS_YES_NO
POPUP_BUTTONS_CANCELLED
POPUP_BUTTONS_ERROR
POPUP_BUTTONS_OK_CANCEL
POPUP_BUTTONS_OK
POPUP_BUTTONS_NO_BUTTONS
注意:请不要使用不同button_types调用Popup自身。 依赖于以该值设置值的Popup函数命名。例如PopupYesNo将设置按钮类型为POPUP_BUTTONS_YES_NO。
滚动输出
如果你有很多信息要显示,有弹出的滚动版本。
显示包含用户提供的文本的滚动弹出窗口。使用尽可能多的项目打印,就像print语句一样。
PopupScrolled(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
yes_no=False,
auto_close=False,
auto_close_duration=None,
size=(None, None),
location=(None, None),
non_blocking=False,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
font=None)
参数说明
名称 | 含义 |
---|---|
*args | (Any) 要显示的变量数量的项 |
title | (str) 窗口要显示的标题。 |
button_color | Tuple[str, str] 按钮颜色(前景色,背景色) |
yes_no | (布尔值)如果为True,则显示Yes和No按钮而不是Ok |
auto_close | (布尔值)如果为True,窗口将自行关闭 |
auto_close_duration | Union[int, float] 旧版本仅接受int。窗口将在指定秒数后关闭 |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
location | Tuple[int, int] 屏幕上放置窗口左上角的位置 |
non_blocking | (bool) 如果为True,则调用将立即返回而不是等待用户输入 |
return | Union[str, None, TIMEOUT_KEY] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
PopupScrolled(*args, button_color=None, yes_no=False, auto_close=False, auto_close_duration=None, size=(None, None), location=(None, None), title=None, non_blocking=False)
典型用法
sg.PopupScrolled(my_text)
PopupScrolled将自动调整窗口大小以适应文本大小。在size参数的高度字段中指定None以获取自动调整高度。
此调用将创建一个80字符宽的滚动框,高度取决于文本行数。
sg.PopupScrolled(my_text, size=(80, None))
请注意,默认在滚动发生之前的最大行数设置为50。在50行时开始滚动。
如果设置了non_blocking参数,则调用将不会阻塞等待用户关闭窗口。将立即返回到用户。当你想在不妨碍程序流程的情况下输出调试信息时很有用。
PopupNoWait
显示弹出窗口并立即返回(不阻塞)
PopupNoWait(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
Popup调用PopupNoWait或PopupNonBlocking将创建一个弹出窗口,然后立即将控制权返回给你。所有其他弹出函数都将阻塞,等待用户关闭弹出窗口。
这个函数在您正在调试并且想要显示某些输出内容,但又不想通过阻塞改变程序的总体时间时非常有用。把它想象成一个print
语句。在这些弹出窗口中没有返回值。
弹出输入
存在针对单项目输入的弹出调用。这些遵循Popup
后跟Get
然后是获取项目类型的模式。有3种输入弹出窗口可供选择,每个都有自定义设置。
PopupGetText
- 获取一行文本PopupGetFile
- 获取文件名PopupGetFolder
- 获取文件夹名
使用这些弹出窗口而不是创建自定义窗口来获取一个数据值,调用弹出输入函数来从用户那里获取项目。如果您发现参数无法创建您正在寻找的那种窗口,那么是时候您自己创建窗口了。
PopupGetText
使用此弹出窗口从用户那里获取一行文本。
显示带有文本输入字段的弹出窗口。返回输入的文本或None(如果关闭/取消)
PopupGetText(message,
title=None,
default_text="",
password_char="",
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_text | (str) 放入输入区域的默认值 |
password_char | (str) 显示为实际输入字符的字符 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
return | Union[str, None] 输入的文本或None(如果窗口关闭或点击了取消按钮) |
import PySimpleGUI as sg
text = sg.PopupGetText('Title', 'Please input something')
sg.Popup('Results', 'The value returned from PopupGetText', text)
PopupGetFile
从用户那里获取文件名。有选项可以配置要显示的对话框类型。通常显示“打开文件”对话框。
显示带有文本输入字段和浏览按钮的弹出窗口,以便用户可以选择文件。
PopupGetFile(message,
title=None,
default_path="",
default_extension="",
save_as=False,
multiple_files=False,
file_types=(('ALL Files', '*.*'),),
no_window=False,
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None),
initial_folder=None)
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_path | (str) 显示给用户的路径作为起点(填充到输入字段中) |
default_extension | (str) 如果用户未输入扩展名,则将其添加到文件名中(仅在保存对话框中使用) |
save_as | (bool) 如果为真,则显示“另存为”对话框,在覆盖之前会进行验证 |
multiple_files | (bool) 如果为真,则允许选择多个文件,这些文件将使用分号(;)分隔并返回 |
file_types | Tuple[Tuple[str,str]] 使用通配符显示的扩展名列表。所有文件(默认)= (("ALL Files", "."),) |
no_window | (bool) 如果为真,则不会显示PySimpleGUI窗口。相反,只显示tkinter对话框 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
initial_folder | (str) 文件系统中的起始浏览位置 |
return | Union[str, None] 表示选择的文件(s)的字符串,如果取消或通过X关闭窗口,则为None |
如果配置为打开文件弹出窗口,则(save_as不是True)对话框将如下所示。
如果您将参数save_As设置为True,则对话框将如下所示
如果您选择了一个已经存在的文件名,会弹出一个警告框询问是否可以。您也可以指定一个不存在的文件。使用“打开”对话框时,不能选择不存在的文件。
一个典型的调用会产生这个窗口。
text = sg.PopupGetFile('Please enter a file name')
sg.Popup('Results', 'The value returned from PopupGetFile', text)
PopupGetFolder
用于获取文件夹名称创建的窗口看起来与获取文件名时相同。区别在于浏览按钮的功能。PopupGetFile
显示“打开文件”对话框,而PopupGetFolder
显示“打开文件夹”对话框。
显示带有文本输入字段和浏览按钮的弹出窗口,以便可以选择文件夹。
PopupGetFolder(message,
title=None,
default_path="",
no_window=False,
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None),
initial_folder=None)
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_path | (str) 显示给用户的路径作为起点(填充到输入字段中) |
no_window | (bool) 如果为真,则不会显示PySimpleGUI窗口。相反,只显示tkinter对话框 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
initial_folder | (str) 文件系统中的起始浏览位置 |
return | Union[str, None] 表示选择的路径的字符串,如果取消或窗口通过X关闭则为None。 |
这是一个典型的调用
text = sg.PopupGetFolder('Please enter a folder name')
sg.Popup('Results', 'The value returned from PopupGetFolder', text)
PopupAnimated
动画弹出窗口允许您通过存储在文件中或作为base64变量的GIF文件轻松显示“加载”风格的动画。
一次显示一帧动画。此函数有自己的内部时钟,这意味着您可以以任何频率调用它,视频帧显示的速率将保持恒定。也许您的帧每30毫秒更新一次,但您的事件循环每10毫秒运行一次。您不必担心延迟,只需在循环中每次都调用它即可。
PopupAnimated(image_source,
message=None,
background_color=None,
text_color=None,
font=None,
no_titlebar=True,
grab_anywhere=True,
keep_on_top=True,
location=(None, None),
alpha_channel=None,
time_between_frames=0,
transparent_color=None)
参数说明
名称 | 含义 |
---|---|
image_source | Union[str, bytes] 可以是文件名或base64字符串。 |
message | (str) 可选的消息,将与动画一起显示 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, tuple) 指定字体家族、大小等 |
no_titlebar | (bool) 如果为True,则标题栏和窗口框架将不会显示 |
grab_anywhere | (bool) 如果为True,则可以通过单击窗口的任何位置并拖动来移动窗口 |
keep_on_top | (bool) 如果为True,则窗口将始终保持在当前显示的所有其他窗口之上 |
location | (int, int) (x,y) 屏幕上的位置,用于放置窗口的左上角。默认为中心屏幕 |
alpha_channel | (float) 窗口透明度 0 = 不可见 1 = 完全可见。介于两者之间的值是透明的 |
time_between_frames | (int) 每帧之间的时间(毫秒) |
transparent_color | (str) 此颜色将在窗口中完全透明。甚至可以点击通过 |
要关闭动画弹出窗口,请使用image_source=None
调用PopupAnimated。这将关闭所有当前打开的PopupAnimated窗口。
进度条!
我们代码中都有循环。'等待时,看着计数器在文本窗口中滚动,不是很愉快吗?有没有一行代码就可以获得包含您代码统计信息的进度条呢?
OneLineProgressMeter(title,
current_value,
max_value,
key,
*args,
orientation=None,
bar_color=DEFAULT_PROGRESS_BAR_COLOR,
button_color=None,
size=DEFAULT_PROGRESS_BAR_SIZE,
border_width=DEFAULT_PROGRESS_BAR_BORDER_WIDTH):
这是单行进度条的实际应用!
for i in range(1,10000):
sg.OneLineProgressMeter('My Meter', i+1, 10000, 'key','Optional message')
这一行代码导致弹出窗口弹出并更新。
一个计量器和一些有趣的统计数据,在您的机器处理时可以观察,所有这些只需一行代码。通过一些技巧,您可以为使用进度条窗口提供退出循环的方法。取消按钮会导致OneLineProgressMeter
返回False
,它通常返回True
。
务必将1添加到循环计数器中,以便计数器从1到最大值。如果您不添加1,您的计数器将永远不会达到最大值。相反,它将从0到max-1。
调试输出(EasyPrint = Print = eprint)
API中“Easy”系列的一个调用是EasyPrint
。与其他常用PySimpleGUI调用一样,同一个调用还有其他名称。除了EasyPrint
外,您还可以使用Print
或eprint
。它们都执行相同的功能,输出到调试窗口。如果调试窗口未打开,则第一次调用将打开它。您只需在代码中插入一个‘sg.Print’调用即可,无需进行其他操作。您甚至可以通过在代码顶部添加以下语句来用EasyPrint替换您的‘print’调用:
print = sg.EasyPrint
at the top of your code.
Print
是一个不错的选择,因为它容易记住。它只是将print
中的P大写。sg.Print('this will go to the debug window')
import PySimpleGUI as sg
for i in range(100):
sg.Print(i)
或者如果您不想更改代码
import PySimpleGUI as sg
print=sg.Print
for i in range(100):
print(i)
与标准print调用一样,EasyPrint
支持sep
和end
关键字参数。可以用来调用EasyPrint
的其他名称包括Print
、eprint
。如果您想关闭窗口,请调用函数EasyPrintClose
。
您可以使用带有debug_win_size
参数的SetOptions
调用更改调试窗口的大小。
有一个选项可以让PySimpleGUI将所有的stdout和stderr输出重定向到这个窗口。为此,请用参数do_not_reroute_stdout
设置为False
调用EasyPrint。一旦用此参数设置为True调用一次,所有未来的对正常print
的调用都将转到调试窗口。
如果您关闭调试窗口,它将在下一次打印时重新打开。如果您想通过代码关闭窗口,则可以调用EasyPrintClose()
或PrintClose()
。
自定义窗口API调用(您的第一个窗口)
这是此GUI编程的有趣部分。为了真正充分利用API,您应该使用支持自动完成或显示函数定义的IDE。这将使自定义更加顺畅。
本节关于自定义窗口的介绍是针对典型的、阻塞的、非持久的窗口。我的意思是,当您“显示”窗口时,函数不会返回,直到用户点击按钮或用X关闭窗口。
存在两种其他类型的窗口。
- 持久窗口 -
Window.read()
方法返回且窗口继续可见。这适用于像聊天窗口或计时器这样的应用程序,它们在屏幕上保持活跃一段时间。 - 异步窗口 - 最棘手的一种。必须非常小心。例子包括MP3播放器或状态仪表板。异步窗口会定期更新(刷新)。您可以通过它们在调用read时的
timeout
参数轻松识别它们。event, values = window.Read(timeout=100)
立即跳入调整您可用的每个小功能既不愉快也不有用。创建一些简单的窗口。使用食谱和演示程序作为学习和“起点”的方法。
窗口设计器
对于GUI编程的新手来说,好消息是PySimpleGUI有一个窗口设计器。更好的是,窗口设计器不需要培训,无需下载,每个人都知道如何使用它。
这是一个手动过程,但如果您遵循说明,只需一分钟就能完成,结果将是一个外观漂亮的GUI。您将采取的步骤是
- 在纸上绘制您的GUI
- 将您的GUI分成行
- 用元素名标记每个元素
- 使用标签作为伪代码编写您的Python代码
让我们举几个例子。
输入一个数字.... 经常流行的初学者程序通常是基于需要用户输入一些内容的游戏或逻辑谜题,比如一个数字。例如“高低”答案游戏,你根据高或低提示来猜测数字。
步骤 1- 绘制 GUI
步骤 2 - 分行
步骤 3 - 标记元素
步骤 4 - 编写代码 我们编写的代码是 GUI 的布局本身。本教程仅关注编写窗口代码,而不是显示内容或获取结果。
第一行只有一个元素,一些文本。行被写成“元素列表”,因此我们需要[]来创建一个列表。这是第一行的代码
[ sg.Text('Enter a number') ]
第二行有 1 个元素,一个输入字段。
[ sg.Input() ]
第三行有一个“确定”按钮
[ sg.OK() ]
现在我们已经定义了 3 行,它们被放入一个表示整个窗口的列表中。
layout = [ [sg.Text('Enter a Number')],
[sg.Input()],
[sg.OK()] ]
最后,我们可以将所有这些组合成一个程序,该程序将显示我们的窗口。
import PySimpleGUI as sg
layout = [[sg.Text('Enter a Number')],
[sg.Input()],
[sg.OK()] ]
event, values = sg.Window('Enter a number example', layout).Read()
sg.Popup(event, values[0])
您的 Read
调用将返回一个字典,但如何访问它的方式“看起来像列表”。第一个输入字段将是条目 0,下一个是 1,依此类推。稍后您将学习关于 key
参数的内容,它允许您使用自己的值来识别元素,而不是让它们按顺序编号。
示例 2 - 获取文件名
假设您编写了一个对某些输入文件进行操作的实用程序,并且您准备使用 GUI 输入该文件名而不是命令行。按照上一个示例的相同步骤 - 在纸上绘制窗口,将其拆分为行,标记元素。
编写此代码同样简单。有一件棘手的事情,那就是浏览文件按钮。幸运的是,PySimpleGUI 会将其与旁边的输入字段关联起来。因此,代码看起来几乎与纸上的窗口完全一样。
import PySimpleGUI as sg
sg.theme('Dark Blue 3') # please make your windows colorful
layout = [[sg.Text('Filename')],
[sg.Input(), sg.FileBrowse()],
[sg.OK(), sg.Cancel()] ]
window = sg.Window('Get filename example', layout)
event, values = window.read()
window.close()
sg.Popup(event, values[0])
继续阅读有关显示窗口并返回结果的调用详细说明。
复制这些设计模式!
您所有的 PySimpleGUI 程序将根据您实现的窗口类型使用以下两种设计模式之一。
模式 1 - “一次性窗口” - 读取一次窗口然后关闭它
如果您不使用“事件循环”(不是多次读取窗口),这将是最常见的模式。窗口被读取并关闭。
您的窗口中的输入字段将作为字典返回给您(在语法上看起来就像列表查找)
import PySimpleGUI as sg
sg.theme('Dark Blue 3') # please make your windows colorful
layout = [[sg.Text('SHA-1 and SHA-256 Hashes for the file')],
[sg.InputText(), sg.FileBrowse()],
[sg.Submit(), sg.Cancel()]]
window = sg.Window('SHA-1 & 256 Hash', layout)
event, values = window.read()
window.close()
source_filename = values[0] # the first input element is values[0]
模式 2 A - 持续窗口(使用事件循环进行多次读取)
一些更高级的程序在窗口保持可见的情况下运行。收集输入值,但不是关闭窗口,而是保持其可见性,作为向用户输出信息和收集输入数据的方式。
此代码将显示一个窗口,并将打印值,直到用户点击退出按钮或使用 X 关闭窗口。
import PySimpleGUI as sg
sg.theme('Dark Blue 3') # please make your windows colorful
layout = [[sg.Text('Persistent window')],
[sg.Input()],
[sg.Button('Read'), sg.Exit()]]
window = sg.Window('Window that stays open', layout)
while True:
event, values = window.read()
if event is None or event == 'Exit':
break
print(event, values)
window.close()
模式 2 B - 持续窗口(使用事件循环进行多次读取 + 更新窗口中的数据)
这是一个稍微复杂一些,但可能更现实的版本,它从用户那里读取输入,并将输入显示在窗口中的文本中。您的程序可能需要进行这些活动(输入和输出),这将为您提供一个很大的起点。
现在不必担心所有这些语句的含义。只需复制它们,以便您可以开始尝试,做一些更改。进行实验,看看事物是如何工作的。
最后一点……输入调用中的参数do_not_clear
决定了按钮事件后输入字段的行为。如果此值为True,则输入值在按钮点击后仍然可见。如果为False,则输入字段将被清除。如果您正在构建带有数据输入的“表单”类型窗口,则可能希望选择False。默认情况下,不清除输入元素(do_not_clear=True
)。
本例介绍了“键”的概念。键在PySimpleGUI中非常重要,因为它们允许您使用您希望使用的名称来识别和处理元素。键可以是任何东西,但不能为None
。要访问以下示例中读取的输入元素的数据,您将使用values['_IN_']
而不是之前的values[0]
。
import PySimpleGUI as sg
sg.theme('Dark Blue 3') # please make your windows colorful
layout = [[sg.Text('Your typed chars appear here:'), sg.Text(size=(12,1), key='_OUTPUT_')],
[sg.Input(key='_IN_')],
[sg.Button('Show'), sg.Button('Exit')]]
window = sg.Window('Window Title', layout)
while True: # Event Loop
event, values = window.read() # can also be written as event, values = window()
print(event, values)
if event is None or event == 'Exit':
break
if event == 'Show':
# change the "output" element to be the value of "input" element
window['_OUTPUT_'].update(values['_IN_'])
# above line can also be written without the update specified
window['_OUTPUT_'](values['_IN_'])
window.close()
Qt Designer
实际上有一个使用Qt窗口设计器的PySimpleGUI窗口设计器。然而,这超出了本文档的范围。您可以在以下位置找到该项目:https://github.com/nngogol/PySimpleGUIDesigner
希望不久能更多地使用它。
Python GUI编程应该是什么样子?至少对于初学者来说?
虽然一个目标是将创建GUI变得简单,但另一个同样重要的目标是使用Pythonic的方式来实现。是否实现了这些目标尚有争议,但无论如何,这是一个尝试。
PySimpleGUI中自定义窗口的关键是将窗口视为GUI元素的行。每一行被指定为这些元素的一个列表。将这些行组合起来,您就得到了一个窗口。这意味着GUI被定义为一系列列表,这是以Pythonic方式看待事物的方法。
让我们分析这个小程序
import PySimpleGUI as sg
sg.theme('Dark Blue 3') # please make your windows colorful
layout = [[sg.Text('Rename files or folders')],
[sg.Text('Source for Folders', size=(15, 1)), sg.InputText(), sg.FolderBrowse()],
[sg.Text('Source for Files ', size=(15, 1)), sg.InputText(), sg.FolderBrowse()],
[sg.Submit(), sg.Cancel()]]
window = sg.Window('Rename Files or Folders', layout)
event, values = window.read()
window.close()
folder_path, file_path = values[0], values[1] # get the data from the values dictionary
print(folder_path, file_path)
主题
导入之后的第一行代码是对theme
的调用。
截至2019年12月,PySimpleGUI中指定“主题”的方式是通过调用change_look_and_feel
。该调用已被更简单的函数theme
取代。
窗口内容(布局)
让我们同意窗口有4行。
第一行只有文本
,内容为重命名文件或文件夹
。
第二行包含3个元素。首先是文本
源文件夹
,然后是一个输入
字段,然后是一个浏览
按钮。
现在让我们看看如何在Python代码中查看这些两行以及另外两行
layout = [[sg.Text('Rename files or folders')],
[sg.Text('Source for Folders', size=(15, 1)), sg.InputText(), sg.FolderBrowse()],
[sg.Text('Source for Files ', size=(15, 1)), sg.InputText(), sg.FolderBrowse()],
[sg.Submit(), sg.Cancel()]]
您可以看到源代码与布局相对应吗?您只需为每一行创建一个列表,然后将该表格提交给PySimpleGUI以显示和获取值。
那么这些返回值呢?大多数人只想显示一个窗口,获取输入值并对其进行处理。所以为什么要把代码分成按钮回调等,当我想让窗口的输入值直接给我时。
对于返回值,窗口从上到下,从左到右进行扫描。每个输入字段将占用返回值中的一个位置。
在我们的示例窗口中,有两个字段,因此此窗口的返回值将是一个包含2个值的字典。记住,如果您在创建元素时没有指定key
,则会为您自动创建一个。它们是从0开始的整数。在本例中,我们有2个输入元素。它们将可访问为values[0]和values[1]。
"读取"窗口的值(也显示窗口)
event, values = window.read()
folder_path, file_path = values[0], values[1]
在一句话中,我们既显示了窗口,也读取了用户的输入。在下一行代码中,字典
的返回值被拆分到单个变量folder_path
和file_path
中。
这不是一个寻找GUI的Python程序员想要的吗?一个易于使用、获取值并继续执行其他程序(真正动作发生的地方)的工具。为什么还要编写成页的GUI代码,而用PySimpleGUI只需3到4行代码就能实现同样的布局。是4行还是40行?大多数人会选择4行。
返回值
从调用 Window.read()
可以得到两个返回值,一个是导致 Read
返回的 event
,另一个是值的列表或字典。如果没有带有键的元素,则它将是一个列表。然而,一些元素(如某些按钮)会自动添加键。 最好在所有输入类型元素上使用键。
两个返回值
所有 Window Read 调用都返回两个值。按照惯例,read 语句是这样写的
event, values = window.read()
您不必这样编写读取语句。您可以按任何方式命名变量。但是,如果您想以其他使用 PySimpleGUI 的程序员熟悉的方式编写代码,则请使用此语句。
事件
第一个参数 event
描述了 为什么 读取完成。事件是这样的
对所有窗口
- 按钮点击
- 使用X关闭窗口
对于特别启用了这些功能的窗口。请参阅本文档中的相应部分了解如何启用这些功能以及事件的返回值。
- 键盘按键
- 鼠标滚轮上下
- 菜单项选择
- 元素改变(滑块、微调器等)
- 列表项被点击
- 在输入元素中按下回车键
- 等待事件超时
- 文本被点击
- 组合框项选择
- 表格行选择
- 等等
大多数 事件将是按钮点击或窗口关闭。其他特定元素的类型事件发生在您在创建元素时设置了 enable_events=True
。
窗口关闭事件
另一个要遵循的惯例是检查使用X关闭的窗口。 这是一个非常重要的事件,需要捕获。如果您不检查这一点,并尝试使用窗口,则程序将崩溃。请检查窗口是否已关闭,并优雅地退出程序。您的用户会喜欢这样做。
完成使用窗口后请关闭它们,即使退出程序也会关闭它们。有时tkinter会在您不关闭窗口时生成错误/警告。对于其他端口,如 PySimpleGUIWeb,不关闭窗口可能会导致程序在后台继续运行。
要检查窗口是否已关闭,请使用此行代码
if event is None:
将所有这些组合在一起,我们最终得到一个看起来像这样的“事件循环”
while True:
event, values = window.read()
if event is None:
break
window.close()
您经常会看到示例和演示程序将此检查写成这样
event, values = window.read()
if event in (None, 'Exit'):
break
此if语句等同于
if event is None or event == 'Exit':
break
不要使用 'Exit'
,而是使用要退出窗口的按钮的名称/键(取消、退出等)
按钮点击事件
默认情况下,按钮总是会返回一个点击事件,或者对于实时按钮,是一个按下事件。您无需执行任何操作即可启用按钮点击。要禁用事件,请使用其 Update 方法禁用按钮。
您可以通过在按钮调用中设置 enable_events=True
来启用一个额外的“按钮修改”事件。这些事件在向按钮“写入”时触发, 通常 是因为按钮被列在另一个按钮的“目标”中。
从 Read 调用返回的按钮值将是以下两个值之一
- 按钮的文本 - 默认值
- 按钮的键 - 如果指定了键
如果按钮在创建时设置了键,则返回该键,无论按钮上显示的文本是什么。如果没有设置键,则返回按钮文本。如果没有按钮被点击,但窗口仍然返回,则事件值是导致事件生成的键。例如,如果在一个Input
元素上设置了enable_events
,并且有人向该Input
框中输入字符,则该事件将是输入框的键。
当用户点击X关闭窗口时,返回值为None。
如果你的窗口有一个事件循环,它会反复读取,请记住给你的用户提供一个“退出”选项。你应该始终检查None值,并且提供某种类型的退出按钮是一种良好的做法。因此,设计模式通常类似于这个事件循环
while True:
event, values = window.read()
if event is None or event == 'Quit':
break
实际上,大多数演示程序和示例中使用的是更“Pythonic”的版本。它们完全做同样的事情。
while True:
event, values = window.read()
if event in (None, 'Quit'):
break
元素事件
某些元素能够在它们发生某些事情时生成事件。例如,当滑动条被移动,列表项被点击或表格行被点击时。默认情况下,这些事件是禁用的。要为元素启用事件,设置参数enable_events=True
。这与旧的click_submits
参数相同。你仍然可以在函数定义中找到click_submits
参数。你可以继续使用它。它们是相同的设置。使用两个值的“或”运算。将来,将删除click_submits,因此请将你的代码迁移到使用enable_events
。
名称 | 事件 |
---|---|
InputText | 任何更改 |
组合框 | 选择了项目 |
列表框 | 选择已更改 |
单选按钮 | 选择已更改 |
复选框 | 选择已更改 |
旋转器 | 选择了新项目 |
多行文本 | 任何更改 |
文本 | 点击 |
状态栏 | 点击 |
图形 | 点击 |
图形 | 拖动 |
图形 | 拖动结束(鼠标抬起) |
标签组 | 标签点击 |
滑块 | 滑动条移动 |
表格 | 选择了行 |
树 | 选择了节点 |
按钮菜单 | 选择了菜单项 |
右键点击菜单 | 选择了菜单项 |
其他事件
MenuBar菜单项被MenuBar和ButtonMenu菜单选择
你将收到MenuBar和ButtonMenu的键。使用该键来读取返回值字典中的值。显示的值将是完整的文本加上所选菜单项的键。请记住,你可以在菜单项上设置键。你将像在菜单定义中定义的那样一起收到文本和键。
右键点击菜单项被选择
与菜单栏和按钮菜单不同,你将直接收到菜单项文本及其键值。你不需要进行字典查找来获取值。这是从WindowRead()返回的事件代码。
窗口 - 键盘,鼠标滚轮
窗口能够返回键盘事件。这些事件作为单个字符返回,如果是特殊键,则返回字符串。实验是我能说的全部。鼠标滚轮事件也是字符串。在代码中添加打印语句以查看返回的内容。
超时
如果你在你的读取中设置了超时参数,那么系统将返回TIMEOUT_KEY。如果你在Read调用中指定了自己的超时键,那么将返回该值。
values
变量 - 将返回值作为列表返回
Read调用中的第二个参数是窗口上的输入字段的列表或字典。
默认情况下,返回值是值的列表,每个输入字段一个条目,但对于除了最简单的窗口之外的所有窗口,返回值都将是一个字典。这是因为你可能会在布局中使用“键”。当你这样做时,它迫使返回值成为字典。
所有输入元素都将在返回值列表中有一个值。如果您确定值将以列表形式返回,那么您可以直接解包到变量中。
event, (filename, folder1, folder2, should_overwrite) = sg.Window('我的标题', window_rows).Read()
或者,更常见的是,您可以分别解包返回结果。这是首选方法,因为它适用于列表和字典返回值。
event, values = sg.Window('My title', window_rows).Read()
event, value_list = window.read()
value1 = value_list[0]
value2 = value_list[1]
...
然而,当您有很多输入字段时,这种方法并不好。如果您在窗口中插入新元素,那么您将不得不将解包下移,修改每个语句以引用 value_list[x]
。
更常见的方法是请求以字典的形式返回值,通过在“重要”元素(您希望获取值并与之交互的元素)上放置键。
values
变量 - 以字典形式返回值
对于那些还没有遇到Python字典的人来说,不要惊慌!只需复制并粘贴示例代码,并对其进行修改。遵循此设计模式,您就会没事。您可能还会在途中学到一些东西。
对于字段数超过3或4个的窗口,您将希望使用字典来帮助您组织返回值。在几乎所有的(如果不是所有的)演示程序中,您都会发现返回值是以字典形式传递的。这不是一个难以理解的概念,语法易于理解,并且代码可读性很好。
您最常遇到的窗口读取语句看起来像这样
window = sg.Window("我的标题", layout).Read()
要使用字典,您需要
- 使用关键字
key
标记您希望包含在字典中的每个输入元素。
如果窗口中的任何元素有 key
,则所有返回值都通过字典返回。如果某些元素没有键,则它们从零开始编号。
让我们看看您第一个基于字典的窗口。
import PySimpleGUI as sg
sg.theme('Dark Blue 3') # please make your windows colorful
layout = [
[sg.Text('Please enter your Name, Address, Phone')],
[sg.Text('Name', size=(15, 1)), sg.InputText('1', key='_NAME_')],
[sg.Text('Address', size=(15, 1)), sg.InputText('2', key='_ADDRESS_')],
[sg.Text('Phone', size=(15, 1)), sg.InputText('3', key='_PHONE_')],
[sg.Submit(), sg.Cancel()]
]
window = sg.Window('Simple data entry window', layout)
event, values = window.read()
window.close()
sg.Popup(event, values, values['_NAME_'], values['_ADDRESS_'], values['_PHONE_'])
要获取输入字段的值,您使用用作 key
值的任何值作为索引值。因此,要获取姓名字段的值,它将写成
values['_NAME_']
将变量 values 视为与列表相同,但是,不要使用 0,1,2 等来引用列表中的每个项目,而是使用键的值。上面的窗口中名称字段由 values['_NAME_']
引用。
您会发现,除非窗口非常简单,否则在大多数 PySimpleGUI 窗口中都会大量使用键字段。
在许多演示程序中,您会看到一种约定,即键以全部大写字母命名,并在开头和结尾处带有下划线。您不必这样做... 您的键值可能如下所示: key = '_NAME__'
这种命名约定的原因是,当您查看代码时,这些键值会立刻跳出来。您会立即知道这是一个键。尝试扫描上面的代码,看看那些键是否会跳出来。key = '_NAME__'
事件循环/回调函数
所有GUI都有一个共同点,即“事件循环”。通常,GUI框架会为您运行事件循环,但有时您想要更大的控制权,并运行您自己的事件循环。您在讨论嵌入式系统或树莓派时经常听到事件循环这个术语。
在 PySimpleGUI 中,如果您的窗口在按钮点击后保持打开状态,那么您的代码将有一个事件循环。如果您的程序显示单个“一次性”窗口,收集数据,然后没有其他GUI交互,那么您不需要事件循环。
事件循环并没有什么神秘的……它们是用于处理事件的循环……等等,事件。事件包括按钮点击、按键、鼠标滚轮上下滚动。
这个小程序有一个典型的PySimpleGUI事件循环。
下面是PySimpleGUI事件循环的结构,一般来说。
- 实际的“循环”部分是一个
while True
循环 - 读取事件和窗口的任何输入值
- 检查窗口是否已关闭或用户希望退出
- 一系列的
if event ....
语句
这是一个完整的、简短的程序,演示了这些概念。
import PySimpleGUI as sg
sg.ChangeLookAndFeel('GreenTan')
# ------ Menu Definition ------ #
menu_def = [['&File', ['&Open', '&Save', 'E&xit', 'Properties']],
['&Edit', ['Paste', ['Special', 'Normal', ], 'Undo'], ],
['&Help', '&About...'], ]
# ------ Column Definition ------ #
column1 = [[sg.Text('Column 1', background_color='lightblue', justification='center', size=(10, 1))],
[sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 1')],
[sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 2')],
[sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 3')]]
layout = [
[sg.Menu(menu_def, tearoff=True)],
[sg.Text('(Almost) All widgets in one Window!', size=(30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)],
[sg.Text('Here is some text.... and a place to enter text')],
[sg.InputText('This is my text')],
[sg.Frame(layout=[
[sg.Checkbox('Checkbox', size=(10,1)), sg.Checkbox('My second checkbox!', default=True)],
[sg.Radio('My first Radio! ', "RADIO1", default=True, size=(10,1)), sg.Radio('My second Radio!', "RADIO1")]], title='Options',title_color='red', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')],
[sg.Multiline(default_text='This is the default Text should you decide not to type anything', size=(35, 3)),
sg.Multiline(default_text='A second multi-line', size=(35, 3))],
[sg.InputCombo(('Combobox 1', 'Combobox 2'), size=(20, 1)),
sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85)],
[sg.InputOptionMenu(('Menu Option 1', 'Menu Option 2', 'Menu Option 3'))],
[sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(30, 3)),
sg.Frame('Labelled Group',[[
sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=25, tick_interval=25),
sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=75),
sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=10),
sg.Column(column1, background_color='lightblue')]])],
[sg.Text('_' * 80)],
[sg.Text('Choose A Folder', size=(35, 1))],
[sg.Text('Your Folder', size=(15, 1), auto_size_text=False, justification='right'),
sg.InputText('Default Folder'), sg.FolderBrowse()],
[sg.Submit(tooltip='Click to submit this form'), sg.Cancel()]]
window = sg.Window('Everything bagel', layout, default_element_size=(40, 1), grab_anywhere=False)
event, values = window.read()
window.close()
sg.Popup('Title',
'The results of the window.',
'The button clicked was "{}"'.format(event),
'The values are', values)
这是一个复杂的窗口,有相当多的自定义尺寸,以确保布局整齐。这是你只需编写一次的代码。在查看代码时,请记住,你所看到的是列表的列表。每一行都包含用于创建窗口的图形元素列表。如果你看到一对方括号[ ],那么你就知道你正在读取其中一行。你的GUI的每一行都将是一个这样的列表。
这个窗口可能在你看来“很难看”,这主要是因为没有做任何使它看起来更好的努力。它纯粹是功能性的。窗口中有30个元素。三十个元素。考虑到它所做的事情,它真是奇迹般地或至少令人难以置信地令人印象深刻。为什么?因为在这个窗口创建、显示、收集结果并在另一个窗口中显示结果的过程中,代码不到50行。
50行。如果你能写出来,用tkinter或Qt代码写出一个窗口的前3个元素就需要50行。
不,让我们在这里明确一下……这个窗口将使用传统的Python GUI包编写大量的代码。这是一个事实,如果你想要证明我是错的,那么请务必这么做。请使用tkinter、Qt或WxPython编写这个窗口,并将代码发给我!
请注意,这个窗口顶部还有一个菜单栏,这是很容易忽略的。
点击提交按钮会导致窗口调用返回。Popup的调用导致了这个窗口。
注意,事件值可以是None
。对于event
的值将是按钮元素创建时显示的文本或按钮的键。如果用户使用窗口右上角的“X”关闭窗口,则event
将是None
。在代码中包含对None的正确检查是至关重要的。
对于“持久窗口”,总是给用户提供一种退出窗口的方法。否则,你可能会遇到永远不会正确关闭的窗口。这实际上是每个演示程序中都有的2行代码。在你做这件事的同时,确保在事件循环之后调用window.Close()
,以确保窗口确实关闭。
你可以在结果弹出窗口中看到返回的值是一个字典。窗口中的每个输入字段都在返回值列表中生成一个项目。输入字段通常返回一个string
。复选框和单选按钮返回bool
。滑块返回float或int,这取决于你的配置或你使用的端口。
如果你的窗口没有键,也没有“浏览”类型的按钮,那么它将返回一个列表而不是字典作为值。如果可能的话,PySimpleGUI会尝试将值作为列表返回,以保持事情简单。
在本例的返回值列表中,许多键都是数字。这是因为没有在任何元素上指定键(尽管自动为你创建了一个)。如果你没有为你的元素指定键,那么将按顺序分配一个数字。对于你不打算修改或从其读取值的元素,如文本元素,你可以跳过添加键。对于其他元素,你可能想要添加键,这样你可以轻松地访问它们的值并对其进行操作。
耗时操作
如果你是Windows用户,你可能会在窗口标题栏看到“未响应”的字样,随后是一个弹出窗口,显示“你的程序已停止响应”。好吧,你也可以让这条消息和弹出窗口出现!你只需要在事件循环中执行耗时较长的操作(即几秒钟)即可。
你有几种处理方法。如果你的操作可以分解为更小的部分,那么你可以偶尔调用 Window.Refresh()
来避免此消息。例如,如果你正在运行循环,可以将该调用与其他工作一起放下。这将使GUI保持愉快,窗口不会抱怨。
另一方面,如果你的操作不在你的控制之下,或者你无法添加 Refresh
调用,那么下一个可用的选项是将你的长操作移入线程。
有一些演示程序可供您查看如何做到这一点。你基本上将工作放入线程中。当线程完成时,它通过队列发送消息来告知GUI。事件循环将运行,并将计时器设置为表示GUI对工作完成“响应性”的值。
这两个演示程序分别称为
Demo_Threaded_Work.py - Best documented. Single thread used for long task
Demo_Multithreaded_Long_Tasks.py - Similar to above, but with less fancy GUI. Allows you to set amount of time
这两个特定的演示有很多注释,显示了添加你的代码的位置等。实际上要完成此操作所需的代码量很小,而且如果你简单地遵循为你准备的演示,你不需要理解使用的机制。
多线程程序
在讨论多个线程的同时,还准备了一个演示,展示了你如何在程序中运行多个线程,所有线程都与事件循环通信,以便在GUI窗口中显示某些内容。回想一下,对于PySimpleGUI(至少是tkinter端口),你不能在主程序线程之外的线程中调用PySimpleGUI调用。
这些多线程程序的关键是线程与你的事件循环之间的通信。这些演示所选择的机制使用Python内置的 queue
模块。事件循环轮询这些队列,以查看是否有来自线程的消息要显示。
你可以找到展示多个线程与单个GUI通信的演示程序,称为
Demo_Multithreaded_Queued.py
对于纯PySimpleGUI(基于tkinter)再次提醒——你的GUI必须始终作为主程序线程运行,并且不能有任何线程直接调用PySimpleGUI调用。
构建自定义窗口
如果你使用IDE,如 PyCharm,来编写PySimpleGUI代码,你会发现这要容易得多。显示你正在进行的API调用文档的功能将帮助您确定要更改哪些设置,如果有的话。在PyCharm中,有两个命令特别有用。
Control-Q (when cursor is on function name) brings up a box with the function definition
Control-P (when cursor inside function call "()") shows a list of parameters and their default values
同步/异步窗口
PySimpleGUI最常用的用途是显示和收集用户信息。最直接的方法是使用“阻塞”的GUI调用。在等待用户关闭GUI窗口/对话框时,执行将被“阻塞”。
上面已经展示了一些使用阻塞窗口的例子。如果没有超时参数,你就知道它是阻塞的。
一个阻塞的Read(等待事件发生的Read)看起来是这样的
event, values = window.read()
一个非阻塞/异步Read调用看起来是这样的
event, values = window.Read(timeout=100)
你可以在文档的最后部分了解更多关于这些异步/非阻塞窗口的信息。
主题 - 窗口自动着色
在2019年12月,函数change_look_and_feel
被theme
所取代。概念保持不变,但一组新的函数使得管理颜色和其他设置变得更加容易。
默认情况下,PySimpleGUI的颜色主题现在是Dark Blue 3
。不再有“系统默认”的灰色颜色。如果你想你的窗口没有颜色,让系统为你选择颜色(灰色),那么将主题设置为'SystemDefault1'或Default1
。
共有130种主题可供选择。你可以通过调用theme_previewer()
预览这些主题,这将创建一个显示所有可用颜色主题的大型窗口。
截至本文撰写时,这些是你的可用主题。
默认为Dark Blue 3
在2019年12月,所有PySimpleGUI窗口的默认主题从系统灰色带蓝色按钮更改为一个更完整的主题,使用灰色蓝色和白色文本。以前,用户会被迫选择非灰色的颜色主题。现在,它为你完成,而不是打扰你。
如果你在这个颜色主题上遇到困难,那么添加一个调用theme
来更改它。
主题名称公式
你指定的主题名称可以是“模糊”的。文本不必与打印出的内容完全匹配。例如,“Dark Blue 3”、“DarkBlue3”和“dark blue 3”都有效。
确定窗口最佳设置的一种快速方法是使用许多不同的主题显示你的窗口。添加设置主题的代码行 - theme('Dark Green 1')
,运行你的代码,看看你是否喜欢,如果不满意,将主题字符串更改为'Dark Green 2'
并再次尝试。重复此过程,直到找到你喜欢的东西。
字符串的“公式”是
深色颜色#
或者
浅色颜色#
颜色可以是蓝色、绿色、黑色、灰色、紫色、棕色、青色、红色。#是可选的,可以是1到XX之间的数字。一些颜色有很多选择。例如,有13种“浅棕色”选择。
"系统"默认 - 无颜色
如果你坚决要在窗口中完全没有颜色,那么可以选择Default 1
或System Default 1
。
如果你想得到原始PySimpleGUI颜色方案,其中按钮是蓝色而其他一切都是灰色,那么你可以通过主题Default
或System Default
获得。
主题函数
基本的主题函数调用是theme(theme_name)
。这设置了主题。如果没有参数调用,theme()
将返回当前主题的名称。
如果你想获取或修改任何主题设置,你可以使用以下函数,你可以在文档底部的函数定义部分找到详细的信息。每个函数如果没有使用参数,将返回当前值。
theme_background_color
theme_border_width
theme_button_color
theme_element_background_color
theme_element_text_color
theme_input_background_color
theme_input_text_color
theme_progress_bar_border_width
theme_progress_bar_color
theme_slider_border_width
theme_slider_color
theme_text_color
这些将帮助你获取可用选项的列表。
theme_list
theme_previewer
窗口对象 - 开始窗口
第一步是使用所需的窗口自定义创建窗口对象。
注意 - PySimpleGUI中没有直接支持"模态窗口"。除非你手动更改窗口的设置,否则所有窗口都可以随时访问。
重要 - 许多 Window
方法要求你在调用该方法之前,必须调用 Window.Read
或 Window.Finalize
(或者在 Window
调用中设置 finalize=True
)。这是因为这两个调用实际上使用底层 GUI 框架创建窗口。在这些调用之前,方法可能会崩溃,因为它们还没有创建其底层小部件。
窗口位置
PySimpleGUI计算窗口的精确中心,并将窗口居中显示。如果你想将窗口定位在其他位置,例如系统默认的 (0,0),你有两种方式可以实现。第一种是在创建窗口时,使用 location
参数设置窗口位置。第二种方式是使用 SetOptions
调用,这将设置未来所有窗口的默认窗口位置。
多显示器和 Linux
如果你的 Linux 系统上有多个显示器,PySimpleGUI 窗口的自动居中(默认)位置可能不正确。在 Windows 上,多个显示器似乎工作正常,因为 tkinter 使用的和报告的是主显示器。
对于有多个显示器且运行默认位置时出现问题的 Linux 用户,需要在创建窗口时通过设置 location
参数来指定窗口应放置的位置。
窗口大小
你可以通过访问 Size
属性来获取窗口的大小。窗口必须至少被读取一次或最终确定,才能使值正确。请注意,它是一个属性,而不是一个调用。
my_windows_size = window.Size
要最终确定你的窗口
window = Window('My Title', layout, finalize=True)
元素大小
设置元素大小有多种方法。它们是
- 全局默认大小 - 使用
SetOptions
函数更改 - 在窗口级别 - 使用在调用
Window
时的参数default_element_size
更改 - 在元素级别 - 每个元素都有一个
size
参数
元素大小以字符为单位(有例外)。具有 size = (20,1)
的文本元素宽 20 个字符,高 1 个字符。
PySimpleGUI 的默认元素大小为 (45,1)
。
有几个小部件其中之一的大小值是以像素而不是字符为单位。这适用于进度条和滑块。第二个参数是像素中的 '高度'。
无标题栏
如果你想创建看起来很酷且没有窗口标题栏的干净窗口,请在创建窗口时使用 no_titlebar 选项。
务必提供一个“退出”按钮,否则用户将无法关闭窗口!当禁用标题栏时,任务栏上将没有窗口的图标。如果没有退出按钮,你需要通过任务管理器结束...这不是一件愉快的事情。
无标题栏的窗口依赖于启用“在任何地方抓取”选项,否则你将无法移动窗口。
无标题栏的窗口可以轻松用于创建浮动启动器。
Linux 用户!请注意,此设置对某些其他元素有副作用。例如,多行输入根本不起作用。因此,请谨慎使用。
在任何地方抓取
这是 PySimpleGUI 独有的功能。
注意 - 如果用户使用带有 grab_anywhere 启用的按钮关闭非阻塞窗口,则会打印一条警告消息。这些消息没有害处,但可能对用户造成困扰。如果你想为非阻塞窗口启用此功能,只需在创建窗口时设置 grab_anywhere = True 即可。
始终在顶部
要使窗口始终位于屏幕上所有其他窗口的顶部,请在创建窗口时设置 keep_on_top = True。此功能使得浮动工具栏非常有帮助,并且始终可见于您的桌面上。
焦点
PySimpleGUI 会为您设置默认的焦点位置。这通常意味着第一个输入字段。您可以将焦点设置到特定的元素。如果您打算自己设置焦点,那么您应该在您的 Window 调用中设置 use_default_focus=False
来关闭自动焦点。
TTK 按钮
从 4.7.0 版本开始,PySimpleGUI 支持使用 "正常" 的 tk 按钮和 ttk 按钮。这一改动是为了让 Mac 用户能在按钮上使用颜色。有一个问题会导致在尝试更改按钮颜色时 tk 按钮不显示文本。请注意,如果您不是使用 Homebrew 安装 Python,而是从官方 Python.org 网站安装 Python,则此问题将消失。许多用户已经切换并感到非常满意,因为即使在切换后 tk 按钮在 Mac 上也能正常工作。
默认情况下,当使用按钮元素时,Mac 用户将获得 ttk 按钮。其他平台将获得正常的 tk 按钮。有方法可以覆盖这种行为。一种是在创建窗口时使用 use_ttk_buttons
参数。如果设置为 True,则窗口中的所有按钮都将为 ttk 按钮。如果设置为 False,则所有按钮都将为正常的 tk 按钮。如果未设置,则平台或按钮元素将决定使用哪种。
如果需要系统级设置,则可以使用 set_options
来设置默认值。这将影响所有窗口,例如弹出窗口和调试窗口。
TTK 主题
tkinter 有许多可用于 ttk 小部件的 "主题"。在 PySimpleGUI 中,这些小部件包括 - 表格、树、组合框、按钮、进度条、标签和标签组。一些元素有 'theme' 参数,但这些不再使用,应该忽略。PySimpleGUI 的初始版本试图在单个窗口中混合主题,但后来发现这是不可能的,因此现在在窗口或系统级别进行设置。
如果需要系统级设置,则可以使用 set_options
来设置默认值。这将影响所有窗口,例如弹出窗口和调试窗口。
ttk 主题的选择取决于平台。Linux 的选择比 Windows 少。以下是在 Windows 上的选择:'default'、'winnative'、'clam'、'alt'、'classic'、'vista'、'xpnative'。
定义了常量以帮助您进行代码补全,以确定您的选择。主题常量以 THEME_
开头。例如,“clam”主题是 THEME_CLAM
。
鼓励您尝试这个设置,以确定您最喜欢哪一个。它们以微妙但仍然显著的方式改变基于 ttk 的元素。
关闭窗口
当您完全完成一个窗口后,您应该关闭它并删除它,以便正确清理资源,特别是 tkinter 资源。
如果您希望用一行代码完成此操作,这里是您的代码行
window.close(); del window
删除操作有助于解决多线程应用程序遇到的问题,其中 tkinter 抱怨它被从错误的线程(不是程序的主线程)调用。
完成窗口形成的窗口方法
在这些示例中,在完成布局制作后,将其存储在名为 layout
的变量中,您将创建您的窗口。
窗口的创建部分涉及 3 个步骤。
- 创建一个
Window
对象 - 将您的布局添加到窗口中
- 可选 - 如果在
Read
调用之前想进行更改,则进行最终化
随着时间的推移,PySimpleGUI 代码一直在压缩、压缩,以便尽可能少地需要程序员编写代码。
单个调用
这是 "长形式",因为每个方法都是单独调用的。
window = sg.Window('My Title')
window.layout(layout)
window.finalize()
调用链(旧方法)
所做压缩的下一级别是将调用链在一起形成一行代码。
window = sg.Window('My Title').Layout(layout).finalize()
使用参数而不是调用(新推荐方法)
这里有一个新颖的概念,而不是使用链式调用,这是初学者不熟悉的,我们可以使用参数调用 Window
。这正是PySimpleGUI移植到4.2版本后所发生的事情。
window = sg.Window('My Title', layout, finalize=True)
与其把工作推给用户去做布局和最终化调用,不如让窗口初始化代码来帮你完成。是的,现在听起来很显然,但几个月前可不是这样。
这个功能已经添加到了所有4个PySimpleGUI移植版本中,但它们还没有在PyPI上发布,因为在运行之前需要确保不会发生真正严重的问题。
设置窗口布局的调用。必须在调用 Read
之前进行。这通常在创建窗口时“链式”进行。
window = sg.Window('My window title', layout)
finalize()
或 Window
参数 finalize=True
强制窗口通过初始化的最后阶段。这将分配tkinter资源,以便可以对其进行修改。这也会使你的窗口出现。如果你不希望窗口在Finalize被调用时出现,请在窗口创建参数中将Alpha设置为0。
如果你要调用一个元素的 Update
方法或调用一个 Graph
元素的绘图原语,你 必须 在这些调用之前调用 Read
或 Finalize
。
read(timeout=None, timeout_key=TIMEOUT_KEY)
以阻塞方式读取窗口的输入值和按钮点击。
返回事件和值。可以通过在Read之前设置timeout=毫秒数 来添加超时。在Read超时后,将返回一个“超时事件”。timeout_key的值将作为事件返回。如果你没有指定超时键,则返回 TIMEOUT_KEY
的值。
如果你设置timeout = 0,那么Read将立即返回,而不是等待输入或超时。这是一个真正的非阻塞“读取”。
布局
在这一点上,虽然文档中还没有展示很多关于每个元素的信息,但你应该仔细阅读这一部分,因为你在这里学到的技术可以帮助你编写更好、更短、更易于理解的PySimpleGUI代码。
如果你觉得这个布局部分来得太突然,那么在你了解每个元素后再回到这一部分。 你找到的最不令人困惑的顺序就是最好的。
虽然你还没有学习元素,但这一部分提前出现是有道理的,这样你就可以在了解每个元素的工作原理之前先学习如何使用这些元素。在你的PySimpleGUI学习中,现在更好地掌握与元素高效工作的方法,而不是每个元素做什么。通过现在学习如何组装元素,你将有一个很好的模型来将你学到的元素放入其中。
PySimpleGUI有几个方面使其比其他Python GUI SDK更具“Python风格”。PySimpleGUI独特的领域之一是窗口的“布局”是如何定义、指定或构建的。窗口的“布局”只是一个元素列表的列表。正如你之前所学的,这些列表组合起来形成一个完整的窗口。这种定义窗口的方法非常强大,因为列表是Python语言的核心,因此很容易创建和操作。
思考一下,并与Qt、tkinter等进行比较/对比。在PySimpleGUI中,元素在矩阵中的位置决定了它在窗口中的显示位置。这是如此 简单,这使得它非常强大。你想在GUI中交换一行文本和下面的输入元素所在的行?没问题,交换代码行就完成了。
布局设计为可视化。其理念是,通过简单地查看代码中的布局,您就能想象出一个窗口的样式。代码本身与屏幕上绘制的内容相匹配。PySimpleGUI介于纯Python代码和可视化GUI设计器之间。
在创建您的窗口的过程中,您可以在不影响元素或窗口的情况下操作这些元素列表。直到您对列表进行“布局”,它们不过是包含对象的列表(它们恰好是您窗口的元素)。
很多时候,您的窗口定义/布局将是静态的,创建起来非常直接。
然而,窗口布局并不局限于静态定义的元素列表之一。
生成的布局(如果您有>5个重复的元素/行,一定要阅读)
本节讨论了5种生成布局的具体技术。它们可以单独使用,也可以相互结合使用。
- 布局 + 布局连接
[[A]] + [[B]] = [[A], [B]]
- 同一行上的元素添加
[[A] + [B]] = [[A, B]]
- 使用列表推导式生成一行
[A for x in range(10)] = [A,A,A,A,A...]
- 使用列表推导式生成多行
[[A] for x in range(10)] = [[A],[A],...]
- 用户定义的元素/复合元素
示例 - 使用列表推导式连接多行 - “待办事项”列表示例
让我们创建一个小布局,它将被用来制作一个待办事项列表,使用PySimpleGUI。
暴力法
import PySimpleGUI as sg
layout = [
[sg.Text('1. '), sg.In(key=1)],
[sg.Text('2. '), sg.In(key=2)],
[sg.Text('3. '), sg.In(key=3)],
[sg.Text('4. '), sg.In(key=4)],
[sg.Text('5. '), sg.In(key=5)],
[sg.Button('Save'), sg.Button('Exit')]
]
window = sg.Window('To Do List Example', layout)
event, values = window.read()
此脚本的输出是这个窗口
花点时间看看代码和生成的窗口。您能否通过查看布局来想象屏幕上的窗口呢?
通过连接行构建
暴力法对于只有5个元素的列表来说效果很好,但假设您的待办事项列表有40个项目。那么呢?嗯,这就是我们转向“生成”布局的时候,这是一个由您的代码生成的布局。用下面的布局定义替换上一个示例中的layout=内容。
import PySimpleGUI as sg
layout = []
for i in range(1,6):
layout += [sg.Text(f'{i}. '), sg.In(key=i)],
layout += [[sg.Button('Save'), sg.Button('Exit')]]
window = sg.Window('To Do List Example', layout)
event, values = window.read()
当然,它产生了相同的窗口。这是进步……从编写GUI的每一行到生成每一行。如果我们想要48个项目,将range(1,6)改为range(1,48)。每次遍历列表,就会在布局上添加一行。
使用列表推导式创建多行
但是,我们还没有完成!
这是 Python,我们正在使用列表构建某些内容,因此我们应该查看 列表推导式。让我们将for
循环移至列表定义内(列表推导式)
layout = [[sg.Text(f'{i}. '), sg.In(key=i)] for i in range(1,6)]
在这里,我们将for
循环移动到列表定义内(列表推导式)
连接多行
我们已经使用列表推导式构建了行,现在只需要按钮。它们可以通过简单的添加很容易地“附加到末尾”。
layout = [[sg.Text(f'{i}. '), sg.In(key=i)] for i in range(1,6)]
layout += [[sg.Button('Save'), sg.Button('Exit')]]
每次您有两个布局时,您都可以通过简单的添加来连接它们。确保您的布局是“列表的列表”布局。在上面的示例中,我们知道第一行是生成的输入行布局。最后一行向布局添加另一个布局……注意格式为[ [ ]]。
这个按钮定义是一个完整的布局,使得它可以添加到我们的列表推导式中
[[sg.Button('Save'), sg.Button('Exit')]]
这是一段非常易读的代码。两个布局在视觉上排列得相当好。
但是,我们不要停止在这里压缩代码。我们如何去掉那个+=并用+
将布局改为单行,只在两行之间加一个+
。
在一行内进行此连接,我们最终得到一个创建整个GUI布局的单一语句
layout = [[sg.Text(f'{i}. '), sg.In(key=i)] for i in range(1,6)] + [[sg.Button('Save'), sg.Button('Exit')]]
最终“待办事项”程序
这就是我们的最终程序...总共只有4行。
import PySimpleGUI as sg
layout = [[sg.Text(f'{i}. '), sg.In(key=i)] for i in range(1,6)] + [[sg.Button('Save'), sg.Button('Exit')]]
window = sg.Window('To Do List Example', layout)
event, values = window.read()
如果你真的想把它压缩成两行程序(一个导入和一行代码),你可以将布局移动到Window
的调用中。
import PySimpleGUI as sg
event, values = sg.Window('To Do List Example', layout=[[sg.Text(f'{i}. '), sg.In(key=i)] for i in range(1,6)] + [[sg.Button('Save'), sg.Button('Exit')]]).Read()
示例 - 构建行 - 表格模拟 - 输入网格
在这个示例中,我们使用Input
元素构建一个4列10行的“表格”。
我们希望得到的结果就像这样
HEADER 1 HEADER 2 HEADER 3 HEADER 4
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
INPUT INPUT INPUT INPUT
代码完成后,结果将如下所示
我们将使用列表推导式构建每一行,并通过另一个列表推导式将行连接起来构建表格。这是一个跨布局的列表推导式,另一个是沿布局向下添加每一行的列表推导式。
构建表头
首先,让我们构建表头。这里有2个概念需要注意
import PySimpleGUI as sg
headings = ['HEADER 1', 'HEADER 2', 'HEADER 3','HEADER 4'] # the text of the headings
header = [[sg.Text(' ')] + [sg.Text(h, size=(14,1)) for h in headings]] # build header layout
这里有两个需要注意的地方
- 创建表头元素的列表推导式
- 添加到前面的空格
让我们从表头本身开始。
这是创建包含表头文本的文本元素的行的代码。结果是文本元素列表,即一行。
[sg.Text(h, size=(14,1)) for h in headings]
然后我们在列表的开头添加一些空格,使表头居中对齐。我们通过在表头列表的前面添加一个Text
元素来完成。
header = [[sg.Text(' ')] + [sg.Text(h, size=(14,1)) for h in headings]]
这个header
变量是一个布局,它包含一个行,该行有很多包含表头的Text
元素。
构建输入元素
Input
元素以网格形式排列。为此,我们将使用双重列表推导式。一个将构建行,另一个将行添加在一起以形成网格。这是完成这个任务的代码行
input_rows = [[sg.Input(size=(15,1), pad=(0,0)) for col in range(4)] for row in range(10)]
这个语句的这一部分创建了一个包含4个Input
元素的行。
[sg.Input(size=(15,1), pad=(0,0)) for col in range(4)]
然后我们取这个Input
元素列表,并根据行数创建尽可能多的元素,在这个例子中是10个。我们再次使用Python的强大列表推导式来添加这些行。
input_rows = [[sg.Input(size=(15,1), pad=(0,0)) for col in range(4)] for row in range(10)]
第一部分应该看起来很熟悉,因为刚刚讨论过它是构建单行的东西。为了构建矩阵,我们只需创建这个单行10次,每次都是一个列表。
组合一切
这是我们的最终程序,它使用简单的加法将表头添加到输入矩阵的顶部。为了使其更具吸引力,颜色主题设置为“深棕色1”。
import PySimpleGUI as sg
sg.theme('Dark Brown 1')
headings = ['HEADER 1', 'HEADER 2', 'HEADER 3','HEADER 4']
header = [[sg.Text(' ')] + [sg.Text(h, size=(14,1)) for h in headings]]
input_rows = [[sg.Input(size=(15,1), pad=(0,0)) for col in range(4)] for row in range(10)]
layout = header + input_rows
window = sg.Window('Table Simulation', layout, font='Courier 12')
event, values = window.read()
用户定义元素/复合元素
“用户定义元素”和“复合元素”是包裹在函数定义中的一组或多个PySimpleGUI元素。在布局中,它们看起来像是某种自定义元素。
当你在布局中多次使用具有许多参数的元素时,用户定义元素特别有用。
示例 - 计算器应用程序的按钮网格
假设你正在制作一个具有以下设置的按钮的计算器应用程序
- 字体 = Helvetica 20
- 大小 = 5,1
- 按钮颜色 = 白色在蓝色上
这些按钮之一的相关代码是
sg.Button('1', button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20))
如果你有6行和5列的按钮,你的布局将有30行这样的文本。
这些按钮的一行可以写成
[sg.Button('1', button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20)),
sg.Button('2', button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20)),
sg.Button('3', button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20)),
sg.Button('log', button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20)),
sg.Button('ln', button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20)),
sg.Button('-', button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20))],
通过使用用户定义元素,你可以显著缩短你的布局。让我们称我们的元素为CBtn
。它将被写成这样
def CBtn(button_text):
return sg.Button(button_text, button_color=('white', 'blue'), size=(5, 1), font=("Helvetica", 20))
使用你新的CBtn
元素,你可以将上面的按钮行重写为
[CBtn('1'), CBtn('2'), CBtn('3'), CBtn('log'), CBtn('ln'), CBtn('-')],
看看你不需要写的代码量有多大!任何你需要多次复制元素的场合,都使用这个结构。
但我们不能就此止步。
由于我们一直在讨论列表推导式,让我们用它们来创建这一行。要做到这一点,我们需要创建一个包含行中符号的列表,然后创建一个循环遍历该列表。结果是看起来像这样的列表
[CBtn(t) for t in ('1','2','3', 'log', 'ln', '-')],
这段代码产生的列表与我们手动创建的列表相同
[CBtn('1'), CBtn('2'), CBtn('3'), CBtn('log'), CBtn('ln'), CBtn('-')],
复合元素
就像可以从用户定义的元素中返回一个Button
一样,多个元素也可以。
回到我们之前做的待办事项列表示例,我们可以定义一个表示待办事项的用户定义的元素,并且这次我们添加了一个复选框。列表中的一行将是
- 项目编号(一个
Text
元素) - 一个
Checkbox
元素来表示已完成 - 一个
Input
元素来输入要做什么
我们的用户元素的定义是这个ToDoItem
函数。它是一个组合了3个PySimpleGUI元素的单一用户元素。
def ToDoItem(num):
return [sg.Text(f'{num}. '), sg.CBox(''), sg.In()]
这使得结合我们之前学到的列表推导技术,创建5个待办事项的列表变得非常简单。以下是创建待办事项列表中5个条目的所需代码。
layout = [ToDoItem(x) for x in range(1,6)]
然后我们实际上可以添加按钮
layout = [ToDoItem(x) for x in range(1,6)] + [[sg.Button('Save'), sg.Button('Exit')]]
以下是我们的最终程序
import PySimpleGUI as sg
def ToDoItem(num):
return [sg.Text(f'{num}. '), sg.CBox(''), sg.In()]
layout = [ToDoItem(x) for x in range(1,6)] + [[sg.Button('Save'), sg.Button('Exit')]]
window = sg.Window('To Do List Example', layout)
event, values = window.read()
它创建的窗口看起来像这样
元素
您将在手册的末尾找到有关元素以及其他类和函数的信息。它们位于readme中的一个大型部分中,按字母顺序排列,便于查找。本节对元素的讨论旨在教您它们是如何工作的。另一部分有详细的调用签名和参数定义。
"元素"是用于创建窗口的构建块。某些GUI API使用"小部件"这个词来描述这些图形元素。
- 文本
- 单行输入
- 包括以下类型的按钮
- 文件浏览
- 文件夹浏览
- 日历选择器
- 日期选择器
- 读取窗口
- 关闭窗口("按钮"和所有快捷按钮)
- 实时
- 复选框
- 单选按钮
- 列表框
- 滑块
- 多行文本输入/输出
- 多行文本输出(在tkinter版本中不可用)
- 可滚动的输出
- 垂直分隔符
- 进度条
- 选项菜单
- 菜单
- 按钮菜单
- 框架
- 列
- 图形
- 图像
- 表格
- 树
- 选项卡,选项卡组
- 状态栏
- 面板
- 拉伸(仅限Qt)
- 调整大小器(仅限纯PySimpleGUI)
常见元素参数
几乎在所有元素创建调用中都会看到一些参数
- key - 与window.FindElement一起使用,以及与返回值一起使用
- tooltip - 将鼠标悬停在元素上时,您将获得一个包含此文本的弹出窗口
- size - (width, height) - 通常以字符宽度和高度测量。有时它们表示像素
- font - 指定字体家族、大小等
- colors - 颜色名称或#RRGGBB字符串
- pad - 在元素周围放置的填充量
- enable_events - 打开元素特定的事件
- visible - 使元素出现或消失
提示
提示是当您将鼠标悬停在元素上方时出现在元素旁边的小文本框。如果您想对窗口的用户非常友好,则可以通过将参数tooltip
设置为某些文本字符串来为它们创建提示。您需要提供自己的换行符/文本换行。如果您不想手动添加它们,请查看标准库包textwrap
。
提示是那些真正为GUI增色并显示其复杂性的"润色"项目之一。大胆一点,给人们留下深刻印象,在你的GUI中添加一些提示。您可以在PySimpleGUI的tkinter版本中通过将TOOLTIP_BACKGROUND_COLOR
设置为所选的颜色字符串来更改提示背景色的颜色。颜色的默认值是
TOOLTIP_BACKGROUND_COLOR = "#ffffe0"
大小
有关设置默认元素大小的信息在上面的窗口部分中进行了讨论。
指定为元素预留的空间数量。对于基于字符的元素,如文本,它是(#个字符,#行)。有时它是一个像素测量值,如图像元素。有时是混合的,如滑块元素(字符长乘以像素宽)。
一些元素,如文本和按钮,有一个默认为开启的自动大小设置。它将根据内容调整元素大小。结果是按钮和文本字段的大小将等于创建它们的字符串大小。您可以将其关闭。例如,对于按钮,效果将是所有按钮在该窗口中具有相同的大小。
元素大小 - 非tkinter端口(Qt、WxPython、Web)
在非tkinter端口中,您可以通过两种方式设置特定元素的大小。一种是在您习惯使用的方式中使用正常的size
参数。这将使用字符和行。
另一种方式是使用一个新的参数,size_px
。此参数允许您直接以像素指定大小。设置size_px=(300,200)
将创建一个300 x 200像素的元素。
此外,您还可以使用size
参数表示像素,如果大小超过转换阈值。这意味着什么?这意味着如果您的宽度> 20(《DEFAULT_PIXEL_TO_CHARS_CUTOFF》),则假定您谈论的是像素而不是字符。但是,一些“通常较大”的元素有一个100的截止值。例如,包括Multline
和Output
元素。
如果您对用于字符到像素转换的数学方法感兴趣,它相当粗糙,但实用。转换是通过这个变量完成的
DEFAULT_PIXELS_TO_CHARS_SCALING = (10,26)
转换简单地取您的size[0]
乘以10,您的size[1]
乘以26。
颜色
表示颜色的字符串。涉及颜色时,您可以指定Tkinter颜色名称,如'lightblue'或RGB十六进制值'#RRGGBB'。对于按钮,颜色参数是一个元组(文本颜色,背景颜色)
在PySimpleGUI中,将颜色写成元组时,确定哪个颜色是背景的方法是将逗号替换为单词“on”。('white', 'red')指定了一个“白色背景红色”的按钮。适用于任何有颜色元组的地方。
填充
元素周围的像素空间量。默认值为(5,3),这意味着在x轴的每侧留出5个像素,在y轴的每侧留出3个像素。您可以通过调用SetOptions在全局范围内更改此值,或者在元素级别上更改。
如果您想在一边比另一边更多的像素,则可以将数字拆分为两个数字。如果您想在左侧留出200个像素,在右侧留出3个像素,则填充为((200,3),3)。在这个例子中,只有x轴被拆分。
字体
指定字体家族、大小和样式。Windows上的字体家族包括
- Arial
- Courier
- Comic
- Fixedsys
- Times
- Verdana
- Helvetica(我想这是默认值)
字体会因系统而异,但是Tk 8.0会自动将Courier、Helvetica和Times映射到所有平台上的相应原生家族名称。此外,在Tk 8.0和更高版本中,字体家族不会导致字体指定失败。
如果您希望将字体家族设置为默认值,则可以将任何不是字体名称的东西作为家族。PySimpleGUI演示程序和文档使用家族'Any'来演示这一点。如果您认为“default”更清晰,可以使用它。
可以用于指定字体的两种格式...一个字符串和一个元组
字符串 - "Family Size Styles"
键
如果您打算使用GUI进行超出基本功能的工作,那么您需要了解键的概念。键是您为元素“标记”一个值的方式,该值将用于识别该元素。在您将键添加到元素的定义中后,Read返回的值将使用该键来告诉您值。例如,如果您有一个输入字段:
Input(key='mykey')
并且您的read看起来像这样:event, values = Read()
那么要从read中获得输入值,将会是:values['mykey']
如果您想对元素调用Update,也请使用相同的键。请参阅下面的更新部分以了解其用法。
键可以是任何内容。假设您有一个带有输入元素网格的窗口。您可以使用它们的行和列位置作为键(一个元组)
key=(row, col)
然后当您读取从调用Window.Read()
返回的values
变量时,values
变量中的键将是您用来创建元素的那个键。在这种情况下,您将按如下方式读取值:values[(row, col)]
大多数情况下,它们是简单的文本字符串。在示例程序中,键遵循以下约定:_KEY_NAME_
(开头和结尾为下划线,全大写字母)或'-KEY_NAME-'.您不必遵循该约定。这样做是为了让您能够快速识别何时使用键。
要找到元素的键,请访问元素的成员变量.Key
。这假设您已经有一个变量包含该元素。
text_elem = sg.Text('', key='-TEXT-')
the_key = text_elem.Key
可见性
从版本3.17开始,您可以创建最初不可见但在以后可以使其可见的元素。
要创建一个不可见的元素,像往常一样放置元素在布局中,并添加参数
visible=False
.
稍后,当您想使该元素可见时,只需调用元素的Update
方法并传入参数visible=True
此功能在Qt上效果最佳,但tkinter版本也能正常工作。可见性参数也可以用于Column和Frame“容器”元素。
注意 - Tkiner元素的布局方式与Qt元素不同,它们在从不可见变为可见时的布局方式不同。
Tkinet元素倾向于堆叠。
一种解决方案是将元素放置在带有其他元素的列中。这将保留该行要放置的位置。然而,它会将元素移动到行的末尾。
如果您想在tkinter中使元素不可见,可以调用`Element.
Qt元素在保持位置方面做得非常好,并且窗口可以很好地调整大小。它更精确,不那么笨拙。
快捷函数/多个函数名
可能不是最好的主意,但确实有人这样做,那就是方法和函数的命名。一些更“常访问的元素”(和方法/函数)有“快捷方式”。
换句话说,我很懒,不喜欢打字。结果是,有几种方法可以做到完全相同的事情。通常,示例程序和其他示例使用全名,或者至少是更长的名称。幸运的是,PyCharm会显示相同的文档,无论您使用哪个。
这使得您一旦习惯了使用SDK,就可以快速编码。例如,文本元素有3个不同的名称Text
、Txt
或T
。InputText也可以写成Input
或In
。
快捷方式不仅限于元素。Window方法Window.FindElement
可以写成Window.Element
,因为它是一个非常常用的函数。但是,现在这个函数也被缩短了。
这是一个持续进行的过程。如果你不及时更新,并且使用了其中一个新快捷键,你只需在代码中重命名该快捷键。例如,如果你的版本中没有sg.T,请将sg.T替换为sg.Text。
文本元素 | T == Txt == Text
基本元素。它显示文本。
layout = [
[sg.Text('This is what a Text Element looks like')],
]
在创建你以后将更新的文本元素时,请确保为新的文本预留足够的空间。如果没有指定大小参数创建文本元素,它将正好适应提供的字符数。
对于等宽字体(通常是默认设置),一组字符的像素大小将不同于另一组字符的像素大小,尽管这两组字符的数量相同。换句话说,不是所有字母都使用相同数量的像素。看看你现在正在阅读的文本,你就会看到这一点。字母“i”占据的空间小于字母“A”。
Window.FindElement(key)
快捷键 Window[key]
在使 PySimpleGUI 代码更加紧凑方面取得了巨大的进步。
以前,你需要编写
window.FindElement(key).Update(new_value)
现在你可以这样编写
window[key].Update(new_value)
这个更改已经发布到 PyPI 的 PySimpleGUI 中
许多感谢要献给那个建议并展示如何做到这一点的人。这是一个惊人的发现。
Element.Update()
-> Element()
快捷键
这可能是我所写的最奇怪的语法结构之一。
它最好与 FindElement
结合使用(参见之前关于如何快捷使用 FindElement
的部分)。
通常,要更改一个元素,你需要“找到”它,然后调用其 update
方法。代码通常看起来像这样,就像你在上一节中看到的那样
window[key].update(new_value)
可以通过删除 .update
字符来进一步压缩代码,得到这个非常紧凑的调用
window[key](new_value)
是的,这是一个有效的 Python 语句。
正在发生的是,正在调用元素本身。你也可以这样写
elem = sg.Text('Some text', key='-TEXT-')
elem('new text value')
旁白 - 你也可以直接调用你的 window
变量。如果你“调用”它,它实际上会调用 Window.read
。
window = sg.Window(....)
event, values = window()
# is the same as
window = sg.Window(....)
event, values = window.read()
看起来很令人困惑,所以当使用时,最好在语句末尾添加注释来帮助后面的初学者程序员。
因为这个结构非常陌生,即使只有一周 Python 课的人也不会认出它,所以演示将继续使用 .update
方法。
它不必与 FindElement
结合使用。调用适用于任何先前创建的元素。有时元素被创建,存储到变量中,然后该变量用于布局。例如。
graph_element = sg.Graph(...... lots of parms ......)
layout = [[graph_element]]
.
.
.
graph_element(background_color='blue') # this calls Graph.Update for the previously defined element
希望这不会太令人困惑。注意,这些快捷键替换的方法不会被删除。你可以继续使用旧的结构而无需更改。
字体
已在常见参数部分中讨论。可以是字符串或元组。
PySimpleGUI 中的颜色有两种格式之一 - 颜色名称或 RGB 值。
使用以下格式指定单个颜色:tkinter 中定义的颜色名称或 RGB 字符串
"#RRGGBB" or "darkblue"
auto_size_text
当 auto_size_text
设置为 True
时,放置在文本元素上,表示元素的宽度应该缩小到文本的宽度。默认设置为 True。当你创建用于输出的 Text
元素时,你需要记住这一点。
Text('', key='_TXTOUT_)
将创建一个长度为 0 的 Text
元素。如果你尝试输出一个 5 个字符的字符串,它将不会显示在窗口中,因为没有足够的空间。解决办法是手动设置大小到你预期的输出。
Text('', size=(15,1), key='_TXTOUT_)
创建一个可以容纳15个字符的 Text
元素。
快捷键函数
Text
的简写函数为 Txt
和 T
事件 enable_events
如果您设置 enable_events
参数,则在用户点击文本时将获得事件。
多行元素
此元素既是输入元素也是输出元素。
layout = [[sg.Multiline('This is what a Multi-line Text Element looks like', size=(45,5))]]
文本输入元素 | InputText == Input == In
layout = [[sg.InputText('Default text')]]
关于 do_not_clear
参数的说明
这曾经让很多人困惑,但现在不再是这样了。在创建 InputText
元素时初始化 do_not_clear
参数。如果设置为 False,则每次调用 Window.Read()
后,输入字段的内容将被清除。当您的窗口是“输入表单”类型的窗口,并且您希望每次都清除所有字段并重新开始时,请使用此设置。
组合元素 | Combo == InputCombo == DropDown == Drop
也称为下拉列表。必需参数是选项列表。返回值是匹配GUI上可见内容的字符串。
layout = [[sg.Combo(['choice 1', 'choice 2'])]]
列表框元素
这是您在大多数GUI中都能找到的标准列表框。请注意,此元素的返回值将是一个 结果列表,而不是单个结果。这是因为用户可以从列表中选择多个项目(如果您设置了正确的模式)。
layout = [[sg.Listbox(values=['Listbox 1', 'Listbox 2', 'Listbox 3'], size=(30, 6))]]
列表框可能会导致窗口从 Read 调用返回。如果设置了 enable_events
标志,则当用户进行选择时,Read 将立即返回。
列表框的另一种可能导致 Read 返回的方式是如果设置了 bind_return_key 标志。如果为 True,则当用户在选择条目时按回车键,Read 将返回。此外,如果设置了此标志,当用户双击条目时,它将从 Read 返回。
滑动条元素
滑动条有一些特定的滑动条设置以及外观设置。例如,orientation
和 range
设置。
layout = [[sg.Slider(range=(1,500),
default_value=222,
size=(20,15),
orientation='horizontal',
font=('Helvetica', 12))]]
Qt 滑动条
Qt 滑动条和 tkinter 滑动条之间存在一个重要区别。在 Qt 上,滑动条值必须是整数,而不是浮点数。如果您想滑动条从 0.1 到 1.0,那么请将滑动条从 1 到 10,然后除以 10。这是一个简单的数学操作,并不是什么大问题。只要处理它......您毕竞是在编写软件。假设您知道如何做这些事情。;-)
单选按钮元素
创建一个分配给一组单选按钮的单选按钮。组中的任何按钮在任何时候都只能选择一个。
layout = [
[sg.Radio('My first Radio!', "RADIO1", default=True),
sg.Radio('My second radio!', "RADIO1")]
]
复选框元素 | CBox == CB == Check
复选框元素类似于单选按钮元素。它们返回一个布尔值,表示是否选中。
layout = [[sg.Checkbox('My first Checkbox!', default=True), sg.Checkbox('My second Checkbox!')]]
旋钮元素
这是一个上/下旋转按钮控件。有效值作为列表传递。
layout = [[sg.Spin([i for i in range(1,11)], initial_value=1), sg.Text('Volume level')]]
图像元素
如果图像是 PNG、GIF、PPM/PGM 格式,则可以将它们放入您的窗口。由于 tkinter 最初不支持 JPG,因此无法显示 JPG。如果您图像是 JPG 格式,可以使用 Python Imaging Library (PIL) 包在调用 PySimpleGUI 之前将您的图像转换为 PNG。
layout = [
[sg.Image(r'C:\PySimpleGUI\Logos\PySimpleGUI_Logo_320.png')],
]
您可以将动画 GIF 作为图像指定,并通过调用 UpdateAnimation
来动画化 GIF。令人兴奋的事情!
您可以在不设置 time_between_frames
值的情况下调用此方法,它将显示一个帧并立即转到下一帧。这使您可以执行帧间定时。
按钮元素
按钮是所有元素中最重要的!它们导致了大多数动作的发生。毕竟,是按钮的按下让您从窗口中出来,无论是提交还是取消,不管怎样,按钮都参与了所有窗口。唯一例外是当用户使用右上角的“X”关闭窗口时,这意味着没有按钮参与。
按钮类型包括
- 文件夹浏览
- 文件浏览
- 文件浏览
- 文件另存为
- 文件保存
- 关闭窗口(普通按钮)
- 读取窗口
- 实时
- 日历选择器
- 颜色选择器
关闭窗口 - 正常按钮如提交、取消、是、否,不会关闭窗口...它们曾经会。现在要关闭窗口,你需要使用CloseButton或CButton。
文件夹浏览 - 点击后将打开一个文件夹浏览对话框。文件夹浏览对话框的结果将写入窗口的一个输入字段中。
文件浏览 - 与文件夹浏览相同,除了选择一个文件而不是文件夹。
日历选择器 - 打开图形日历来选择日期。
颜色选择器 - 打开颜色选择器对话框
读取窗口 - 这是一个窗口按钮,将读取所有输入字段的快照,但点击后不会关闭窗口。
实时 - 这又是另一个异步窗口按钮。正常按钮点击发生在按钮点击释放后。实时按钮在整个按钮按下期间报告点击。
大多数程序将使用快捷按钮调用(提交、取消等)、保持窗口打开的正常按钮和点击时关闭窗口的CloseButton。
有时同一个功能有多个名称。这只是为了使程序员的任务更快更简单。或者它们是已不再使用但保留在现有程序中以防程序崩溃的旧名称。
PySimpleGUI按钮的四个主要窗口及其名称是
Button
=ReadButton
=RButton
=ReadFormButton
(使用Button
,其他是旧方法)CloseButton
=CButton
实时按钮
虚拟按钮
你会在旧程序中找到长名称。例如ReadButton。
2018年10月,Button的定义发生了变化。以前,点击Button会关闭窗口。现在Button调用将保持窗口打开,与ReadButton完全一样。它们现在是相同的调用。为了使窗口可以通过按钮关闭,添加了一个新按钮... CloseButton
或CButton
。
你的PySimpleGUI程序很可能只包含Button
调用。其他一般不出现在用户代码中。
最基本要使用的按钮元素调用是Button
layout = [[sg.Button('Ok'), sg.Button('Cancel')]]
你很少会看到这两个按钮以这种方式书写。回想一下,PySimpleGUI专注于你(这通常直接意味着...少打字)。因此,上述窗口的代码通常使用下一节中找到的快捷方式来编写。
通常你会看到这种方式代替对Button
的调用
layout = [[sg.Ok(), sg.Cancel()]]
实际上Button
是在你的 behalf 被调用的。在幕后,sg.Ok
和sg.Cancel
调用Button
,并将文本设置为Ok
和Cancel
,然后这些结果被放入布局中。如果你打印布局,它将看起来与第一个布局相同,其中在布局中特别显示了Button
。
TTK按钮 & Macs
2019年添加了对TTK按钮的支持。这解决了在Mac上无法更改按钮颜色的问题。有多个地方可以控制是否在Mac或其他平台上使用TTK按钮。
TTK按钮和TK按钮的操作略有不同。按钮高亮是一个不同的例子。同时显示图像和文本的另一个不同之处。现在你有了一些以前没有的选项。看到Mac用户最终可以使用颜色主题真是太好了。
按钮元素快捷方式
这些预设按钮是所有元素中最重要的一部分,因为它们被使用得非常多。它们基本上都做同样的事情,将按钮文本设置为与功能名称匹配,并将参数设置为常用值。如果您经常需要创建自定义按钮,因为它不在列表中,请将请求发布在GitHub上。
- 确定
- 确定
- 提交
- 取消
- 是
- 否
- 退出
- 退出
- 帮助
- 保存
- 另存为
- 打开
"选择器"按钮
这些按钮用于显示对话框,选择诸如文件名、日期、颜色等,并将它们填充到InputText
元素(或某些其他“目标”)中(有关目标,请参阅下文)。
- 日历按钮
- 颜色选择器按钮
- 文件浏览
- 文件浏览
- 文件另存为
- 文件夹浏览
关于快捷按钮的导入注意事项在3.11.0版本之前,这些按钮会关闭窗口。从3.11版本开始,它们将不会关闭窗口。它们的行为类似于R按钮(返回按钮文本,不关闭窗口)。
如果您在使用这些按钮关闭窗口时遇到问题,请通过在命令提示符中键入pip list
来检查您安装的PySimpleGUI版本。在3.11之前,这些按钮会关闭您的窗口。
使用旧版本时,如果您想要一个不关闭窗口的Submit()按钮,则可以使用RButton('Submit')代替。使用新版本时,如果您想要一个像旧的Submit()调用那样关闭窗口的Submit按钮,可以写成CloseButton('Submit')
或CButton('Submit')
。
按钮目标
FileBrowse
、FolderBrowse
、FileSaveAs
、FilesSaveAs
、CalendarButton
和ColorChooserButton
按钮都将值填充到窗口上另一个元素中。目标可以是文本元素或InputText元素,甚至是按钮本身。元素的位置由函数调用中的target
变量指定。
目标有两种形式。
- 键
- (行, 列)
使用键指定的目标将使用目标的键值来查找其目标元素。这是“首选”方法。
如果使用(行, 列)指定目标,则使用网格系统。您的GUI的行从0开始编号。目标可以指定为硬编码的网格项,也可以相对于按钮。
(row, col)目标只能针对同一“容器”中的元素。容器是窗口、列和框架元素。位于列内的文件浏览按钮无法针对该列之外的其他元素进行目标。
target
的默认值为(ThisRow, -1)
。ThisRow
是一个特殊值,告诉GUI使用与按钮相同的行。Y值为-1表示按钮左侧的一个值。对于文件或文件夹浏览按钮,通常填充的字段位于按钮的左侧。即按钮左侧同一行的元素。
如果为目标选择(None, None)
值,则按钮本身将持有信息。以后可以通过使用按钮的键来查询按钮的值。
让我们以这个窗口为例来分析一下
InputText
元素位于(1,0)... 行1,列0。浏览按钮位于位置(2,0)。按钮的目标可以是任何这些值
Target = (1,0)
Target = (-1,0)
整个窗口的代码可以是
layout = [[sg.T('Source Folder')],
[sg.In()],
[sg.FolderBrowse(target=(-1, 0)), sg.OK()]]
或者如果使用键,则代码将是
layout = [[sg.T('Source Folder')],
[sg.In(key='input')],
[sg.FolderBrowse(target='input'), sg.OK()]]
看看键方法有多简单?
不可见目标
一个非常实用的技巧是使目标不可见。这将阻止您像通常使用输入元素那样编辑所选择的值。这是一种使事物看起来更干净、更简洁的方法。
保存和打开按钮
有4种不同的文件/文件夹打开对话框可用。如果您正在寻找要打开的文件,则FileBrowse
是您需要的。如果您要保存文件,则SaveAs
是按钮。如果您想获取文件夹名称,则应使用FolderBrowse
按钮。要一次性打开多个文件,请使用FilesBrowse
按钮。它将创建一个以';'分隔的文件列表。
日历按钮
这些按钮会弹出日历选择器窗口。选择的日期将作为字符串返回。
颜色选择器按钮
这些按钮会弹出标准颜色选择器窗口。结果以元组形式返回。返回值之一是RGB十六进制表示。
自定义按钮
并非所有按钮都是相同的。关闭窗口的按钮与返回窗口而不关闭的按钮不同。如果您想定义自己的按钮,通常使用按钮元素Button
,当点击时关闭窗口。
layout = [[sg.Button('My Button')]]
所有按钮都可以通过更改按钮调用中的button_text
参数来更改其文本。当读取窗口时返回此文本。此文本将告诉您哪个按钮被点击。但是,您也可以使用按钮上的键,使它们具有唯一性。如果只使用文本,您将无法在同一个窗口中放置具有相同文本的2个按钮。
layout = [[sg.Button('My Button', key='_BUTTON_KEY_')]]
使用这种布局,当按钮被点击时,从Window.Read()
调用返回的事件将是"_BUTTON_KEY_
"
按钮图片
这是一个许多简化包中没有的令人兴奋的功能……按钮上的图片!您可以使用几个按钮图片制作一个相当漂亮的用户界面。
您的按钮图片需要是PNG或GIF格式。当您使用图片制作按钮时,请将按钮背景设置为与背景相同的颜色。有一个按钮颜色TRANSPARENT_BUTTON
,您可以将按钮颜色设置为透明,以便它与背景融合。请注意,此值目前与Windows上的默认系统背景颜色相同。如果您想将按钮背景颜色设置为当前系统默认值,请使用值COLOR_SYSTEM_DEFAULT
作为背景颜色。
此示例来自Demo Media Player.py
示例程序。因为它是一个非阻塞按钮,所以定义为RButton
。您也可以通过使用Button
在阻塞按钮上放置图片。
sg.Button('Restart Song', button_color=sg.TRANSPARENT_BUTTON,
image_filename=image_restart, image_size=(50, 50), image_subsample=2, border_width=0)
按钮图片使用三个参数。
image_filename - Filename. Can be a relative path
image_size - Size of image file in pixels
image_subsample - Amount to divide the size by. 2 means your image will be 1/2 the size. 3 means 1/3
这是一个使用按钮图片制作的示例窗口。
您可以在文件Demo Media Player中找到源代码。以下是创建媒体播放器窗口的按钮调用的样子
sg.Button('Pause', button_color=sg.TRANSPARENT_BUTTON,
image_filename=image_pause,
image_size=(50, 50),
image_subsample=2,
border_width=0)
有时需要实验才能真正理解这些概念。
实时按钮
通常,按钮在鼠标按钮在按钮上向下点击后释放时被认为是“点击”的。那么在需要读取原始上下按钮值的时候怎么办。一个经典的例子是机器人遥控器。使用GUI构建遥控器足够简单。每个方向一个按钮是一个开始。也许是这样的
此窗口有两种按钮类型。有一个正常的“读取按钮”(退出)和4个“实时按钮”。
以下是创建、显示和获取此窗口结果的代码
import PySimpleGUI as sg
gui_rows = [[sg.Text('Robotics Remote Control')],
[sg.T(' ' * 10), sg.RealtimeButton('Forward')],
[sg.RealtimeButton('Left'), sg.T(' ' * 15), sg.RealtimeButton('Right')],
[sg.T(' ' * 10), sg.RealtimeButton('Reverse')],
[sg.T('')],
[sg.Quit(button_color=('black', 'orange'))]
]
window = sg.Window('Robotics Remote Control', gui_rows)
#
# Some place later in your code...
# You need to perform a Read or Refresh call on your window every now and then or
# else it will apprear as if the program has locked up.
#
# your program's main loop
while (True):
# This is the code that reads and updates your window
event, values = window.Read(timeout=50)
print(event)
if event in ('Quit', None):
break
window.Close() # Don't forget to close your window!
此循环将读取按钮值并打印出来。当实时按钮被点击时,对window.Read
的调用将返回一个与被按下的按钮名称匹配的按钮名称或分配给按钮的键。只要按钮保持按下状态,它将继续返回值。一旦释放,Read将返回超时事件,直到再次点击按钮。
文件类型 FileBrowse
和 SaveAs
按钮有一个额外的设置,名为 file_types
。这个变量用于过滤文件对话框中显示的文件。此设置的默认值是
FileTypes=(("ALL Files", "*.*"),)
此代码生成一个窗口,其中浏览按钮仅显示 .TXT 类型的文件
layout = [[sg.In() ,sg.FileBrowse(file_types=(("Text Files", "*.txt"),))]]
注意 - Mac 用户将无法使用 file_types 参数。tkinter 在 Mac 上有一个错误,如果尝试使用 file_type,则会导致程序崩溃,因此该功能不得不被移除。对此我们深感抱歉!
回车键 回车键是 Windows 数据输入的重要部分。使用回车键快速提交窗口的传统已经由来已久。PySimpleGUI 通过将回车键与第一个关闭或读取窗口的按钮相关联来实现这一点。
回车键可以“绑定”到特定的按钮,以便在按下该键时,它将使窗口返回,就像点击了按钮一样。这是通过在按钮调用中使用 bind_return_key
参数来实现的。如果窗口上有多个按钮,则使用第一个类型为关闭窗口或读取窗口的按钮。第一个按钮的确定是通过从上到下、从左到右扫描窗口来实现的。
按钮菜单元素
按钮菜单元素产生了一种独特的效果。它是一个按钮,点击后会显示一个菜单。这就像在菜单栏上点击顶级菜单项一样。因此,菜单定义采用单个菜单条目格式,来自正常菜单定义。正常的菜单定义是一个列表的列表。这个定义是其中之一。
['Menu', ['&Pause Graph', 'Menu item::optional_key']]
通常,第一个字符串指定菜单栏上显示的内容。在这种情况下,该值不使用。您可以使用不同的参数设置按钮文本,即 button_text
参数。
此元素的一个用途是创建一个具有彩色背景的“假菜单栏”。正常的菜单栏无法更改其背景颜色。按钮菜单则不同。
按钮菜单的返回值通过返回值字典发送。如果进行了选择,则生成一个等于按钮菜单键值的事件。使用该键值查找用户选择的值。这与菜单栏元素的机制相同,但与弹出(右键单击)菜单不同。
垂直分隔符元素
此元素的作用有限,更多的是为了完整性而包含的。它将在元素之间绘制一条线。
当放置在列或跨越多行的元素之间时,效果最好。如果在一个“正常”行上,元素只有 1 行高,那么它将只跨越那一行。
VerticalSeparator(pad=None)
水平分隔符元素
在 PySimpleGUI 的 tkinter 端口,没有 HorizontalSeparator
元素。将添加一个“占位符”以便代码可移植。它可能什么也不做,就像 Stretch
元素一样。
在 PySimpleGUI 中获取水平线的简单方法是在 Text
元素中包含一行下划线
sg.Text('_'*30) # make a horizontal line stretching 30 characters
进度条元素
使用 ProgressBar
元素可以构建自定义进度条窗口。强烈建议您使用 OneLineProgressMeter,它为您提供完整的进度条解决方案。进度条不易处理,因为窗口必须是非阻塞的,并且它们难以调试。
将进度条添加到代码中最简单的方法是使用OneLineProgressMeter
API。它包含一对函数,分别是OneLineProgressMeter
和OneLineProgressMeterCancel
。您可以通过调用它并传入当前值等于最大值来轻松取消任何进度条。这将使进度条失效并关闭窗口。您已经在之前的readme文件中看到了OneLineProgressMeter的调用。
sg.OneLineProgressMeter('My Meter', i+1, 1000, 'key', 'Optional message')
OneLineProgressMeter
的返回值是:True
表示进度条更新正确,False
表示用户点击了取消按钮、关闭了窗口或值达到了最大值。
窗口中的进度条
另一种使用PySimpleGUI中的进度条的方法是在窗口中构建一个带有ProgressBar
元素的定制窗口。您需要以非阻塞方式运行窗口。当您准备好更新进度条时,您将调用ProgressBar
元素的UpdateBar
方法。
import PySimpleGUI as sg
# layout the window
layout = [[sg.Text('A custom progress meter')],
[sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')],
[sg.Cancel()]]
# create the window`
window = sg.Window('Custom Progress Meter', layout)
progress_bar = window['progressbar']
# loop that would normally do something useful
for i in range(1000):
# check to see if the cancel button was clicked and exit loop if clicked
event, values = window.read(timeout=10)
if event == 'Cancel' or event is None:
break
# update bar with loop value +1 so that bar eventually reaches the maximum
progress_bar.UpdateBar(i + 1)
# done with loop... need to destroy the window as it's still open
window.close()
输出元素
输出元素是Stdout的重定向。
如果您想快速在窗口中显示滚动文本,那么添加一个Output
元素就几乎是最快和最简单的方法了。
打印的任何内容都将显示在这个元素中。这是在窗口中显示滚动文本的“简单”方法。只需将输出元素放入窗口并调用print多少次都可以,用户将在他们的窗口中看到一个滚动文本区域。
重要您将不会看到您print
的内容,直到您调用window.Read
或window.Refresh
。如果您想立即看到打印的内容,请在print语句后立即调用window.Refresh()
。
Output(size=(80,20))
这是一个使用输出元素的完整聊天窗口解决方案。要显示接收到的数据,您可以简单地“打印”它,它将显示在输出区域。您可以在包括HowDoI应用程序在内的几个演示程序中找到这种技术。
import PySimpleGUI as sg
def ChatBot():
layout = [[(sg.Text('This is where standard out is being routed', size=[40, 1]))],
[sg.Output(size=(80, 20))],
[sg.Multiline(size=(70, 5), enter_submits=True),
sg.Button('SEND', button_color=(sg.YELLOWS[0], sg.BLUES[0])),
sg.Button('EXIT', button_color=(sg.YELLOWS[0], sg.GREENS[0]))]]
window = sg.Window('Chat Window', layout, default_element_size=(30, 2))
# ---===--- Loop taking in user input and using it to query HowDoI web oracle --- #
while True:
event, value = window.read()
if event == 'SEND':
print(value)
else:
break
window.close()
ChatBot()
列元素 & 框架,选项卡“容器”元素
列、框架和选项卡都是“容器元素”,行为类似。本节重点介绍列,但也可以应用于其他方面。
从版本2.9开始,您可以通过使用列元素来执行更复杂的布局。将列视为窗口内的窗口。是的,如果您愿意,您可以在列内嵌套列。
列的指定方式,与所有“容器元素”一样,与窗口的指定方式完全相同,即列表的列表。
当您想在单行中指定多个元素时,需要列。
例如,这个布局有一个跨越多行的单个滑块元素,后面跟着同一行的7个Text
和Input
元素。
没有列元素,您无法创建这样的布局。但有了它,您应该能够创建出与使用tkinter创建的任何布局非常接近的布局。
import PySimpleGUI as sg
# Demo of how columns work
# window has on row 1 a vertical slider followed by a COLUMN with 7 rows
# Prior to the Column element, this layout was not possible
# Columns layouts look identical to window layouts, they are a list of lists of elements.
window = sg.Window('Columns') # blank window
# Column layout
col = [[sg.Text('col Row 1')],
[sg.Text('col Row 2'), sg.Input('col input 1')],
[sg.Text('col Row 3'), sg.Input('col input 2')],
[sg.Text('col Row 4'), sg.Input('col input 3')],
[sg.Text('col Row 5'), sg.Input('col input 4')],
[sg.Text('col Row 6'), sg.Input('col input 5')],
[sg.Text('col Row 7'), sg.Input('col input 6')]]
layout = [[sg.Slider(range=(1,100), default_value=10, orientation='v', size=(8,20)), sg.Column(col)],
[sg.In('Last input')],
[sg.OK()]]
# Display the window and get values
window = sg.Window('Compact 1-line window with column', layout)
event, values = window.read()
window.Close()
sg.Popup(event, values, line_width=200)
列、框架、选项卡、窗口元素对齐
从版本4.3开始,您可以设置任何容器元素的对齐方式。这是通过element_justification
参数完成的。这将极大地帮助任何想要在窗口中居中所有内容的人。之前这类布局很难实现,如果不是不可能的话。
通过设置Column
的justification
参数来对齐Column
元素的行。
您还可以通过使用列的element_justification
参数来对齐列中的整个内容。
通过这些参数,您现在可以创建具有居中内容的窗口。之前这非常困难。
目前此功能仅在主PySimpleGUI端口中可用。
它们还可以用于以特定方式对一组元素进行对齐。
将Column
元素放入Columns
元素中,可以创建多种
尺寸元素
4.3版中新增了Sizer
元素。此元素用于帮助创建特定大小的容器。它可以放置在以下PySimpleGUI项目中
- 列
- 框架
- 标签页
- 窗口
Sizer
的实现非常简单。它返回一个空的Column
元素,其填充值设置为传递给Sizer
的值。因此,它不是一个类,而是一个类似于预定义按钮的“快捷函数”。
目前,此功能仅在PySimpleGUI的tkinter端口中可用。需要跨端口。
框架元素(带标签的框架,带标题的框架)
框架的工作方式与列完全相同。您创建布局,然后使用该布局初始化框架。就像列元素一样,它是一个“容器元素”,可以包含一个或多个元素。
注意框架布局与窗口布局看起来完全相同。窗口的工作方式与列和框架完全相同。它们都是“容器元素”——包含其他元素的元素。
这些容器元素可以嵌套到您想要的深度。这是一个相当酷的功能,对吧?这需要很多工作,所以请表示感激。递归代码并不简单。
此代码创建了一个带有框架和2个按钮的窗口。
frame_layout = [
[sg.T('Text inside of a frame')],
[sg.CB('Check 1'), sg.CB('Check 2')],
]
layout = [
[sg.Frame('My Frame Title', frame_layout, font='Any 12', title_color='blue')],
[sg.Submit(), sg.Cancel()]
]
window = sg.Window('Frame with buttons', layout, font=("Helvetica", 12))
画布元素
在我看来,tkinter Canvas小部件是tkinter小部件中最强大的。尽管我尽力将用户与所有与tkinter相关的内容完全隔离,但Canvas元素是一个例外。它能够与许多其他包集成,常常产生令人瞩目的结果。
然而,还有另一种获得这种力量的方法,那就是通过Graph元素,这是一个甚至更强大的元素,因为它使用一个可以直接访问的Canvas。Graph元素具有Canvas元素没有的大量绘图方法。此外,如果您需要,您可以通过成员变量访问Graph元素的“Canvas”。
Matplotlib、Pyplot集成
**注意 - Matplotlib的最新版本(3.1.0)不再与该技术兼容。** 您必须安装3.0.3才能使用“演示程序”部分中提供的演示Matplotlib程序。
这种集成之一是与Matploplib和Pyplot的集成。有一个编写的演示程序,您可以将其用作设计模式,以了解如何使用Canvas小部件。
def Canvas(canvas - a tkinter canvasf if you created one. Normally not set
background_color - canvas color
size - size in pixels
pad - element padding for packing
key - key used to lookup element
tooltip - tooltip text)
获取tkinter Canvas小部件的操作顺序是
figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds
# define the window layout
layout = [[sg.Text('Plot test')],
[sg.Canvas(size=(figure_w, figure_h), key='canvas')],
[sg.OK(pad=((figure_w / 2, 0), 3), size=(4, 2))]]
# create the window and show it without the plot
window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI', layout).Finalize()
# add the plot to the window
fig_photo = draw_figure(window.FindElement('canvas').TKCanvas, fig)
# show it all again and get buttons
event, values = window.read()
要从PySimpleGUI获取tkinter Canvas小部件,请按照以下步骤操作
- 将画布元素添加到您的窗口中
- 布局您的窗口
- 调用
window.Finalize()
- 这是一个关键步骤,您绝对不能忘记 - 通过键查找来查找画布元素
- 您的画布小部件对象将是found_element.TKCanvas
- 在画布上绘制,随心所欲
- 调用
window.read()
- 在您调用Read之前,画布上不会显示任何内容
有关可复制的食谱,请参阅Demo_Matplotlib.py
。
方法与属性
TKCanvas - 不是一个方法,而是一个属性。返回tkinter Canvas小部件
Graph元素
所有数学爱好者都会喜欢这个元素...而对于非数学爱好者来说,它会更加有趣。
我发现处理GUI框架中的图形坐标系统比处理任何其他事情都要无聊。它总是与我想要的相反。(0,0)在左上角...有时...或者它是在左下角?简而言之,它是一个头疼的事情。
关于获得自己的位置(0,0)并使用这些坐标而不是tkinter提供的坐标的功能,您觉得如何?这会带来一个非常强大的功能 - 在您自己的单位内工作,然后以像素为单位显示。
如果您曾对在某个表面上绘制位置(0,0)在哪里感到沮丧,那么请放心,您的沮丧将在这里结束。您可以使用您想要的任何坐标系进行绘制。将(0,0)放置在您想要的位置,包括不在您的图上。您可以定义一个X轴上介于-2.1和-3.5之间的所有负数,Y轴上介于-3到-8.2之间的图
您需要提供3个值给图元素。它们是
- 画布的像素大小
- 坐标系左下角(x,y)坐标
- 坐标系右上角(x,y)坐标
提供这些值后,您可以通过创建图图形在您的图上随意绘制。通过调用以下函数创建图形,并获取图形ID
- DrawCircle
- DrawLine
- DrawPoint
- DrawRectangle
- DrawOval
- DrawImage
您可以通过提供图形ID以及要移动的
graph.MoveFigure(my_circle, 10, 10)
您还可以使用此ID删除您绘制的单个图形
graph.DeleteFigure(my_circle)
图元素内的鼠标事件
如果您已为图元素启用了事件,那么您将接收到鼠标点击事件。如果您还启用了在创建图元素时drag_submits
,那么当您在窗口内部“拖动”时,您也会收到事件。拖动被定义为左键按下然后鼠标移动。
当拖动事件发生时,事件将是图元素的键。在值字典中返回的value
是当前鼠标位置的(x,y)位置的元组。
这意味着您将获得一个“流”的事件。如果鼠标移动,您至少会接收到1个事件,很可能还会接收到很多事件。
拖动的鼠标抬起事件
当您启用drag_submits
时,会出现一个棘手的情况……当您完成拖动并释放鼠标按钮时会发生什么?如何将“鼠标抬起”事件传回您的代码。
“鼠标抬起”将为您生成一个带有值的的事件:Graph_key
+ +UP'
。因此,如果您的图元素的键为'_GRAPH_'
,那么当鼠标按钮释放时,您将收到的事件是:'_GRAPH_+UP'
是的,这有点奇怪,但它有效。它也很简单。我建议在处理这些字符串值时使用内置的.startswith
和.endswith
。
以下是一个示例,说明在具有键'graph'的图元素内部点击和拖动时生成的events
和values dictionary
graph {'graph': (159, 256)}
graph {'graph': (157, 256)}
graph {'graph': (157, 256)}
graph {'graph': (157, 254)}
graph {'graph': (157, 254)}
graph {'graph': (154, 254)}
graph {'graph': (154, 254)}
graph+UP {'graph': (154, 254)}
表格元素
表格和树元素在PySimpleGUI中是最复杂的。它们有很多选项和很多不寻常的特性。
window.read()
从表格元素返回值
从Window.Read
调用返回的表格元素的值是当前突出显示的行号列表。
Qt Table.Get()
调用
在PySimpleGUIQt
中新增了Table
方法的Get
。此方法返回当前在GUI中显示的表。此方法是为了获取用户可能对表进行的任何编辑。
对于tkinter端口,它将返回创建表时传递的相同值,因为tkinter表格不能被用户修改(如果您知道方法,请提交问题)。
已知的Table
可视化问题……
存在一个难以捉摸的问题,即点击或靠近表头时,tkinter会疯狂地连续调整列的大小,就像你移动鼠标一样。
这个问题自从Table
元素首次发布以来就存在了。它在4.3版本中得到了修复。
Python 3.7.3、3.7.4、3.8版本中已知的表颜色?
过去几版Python中发布的tkinter存在一个bug。所有类型的表颜色都不起作用,行的背景永远不会改变。如果你觉得这很重要,你需要将你的Python版本降级。3.6与PySimpleGUI和tkinter配合得很好。
空表
如果你希望以空表开始,你需要指定一个空表。这个列表推导式将创建一个包含15行和6列的空表。
data = [['' for row in range(15)]for col in range(6)]
来自表的事件
有两种方法可以从Table元素获取事件。
当点击一行时,会立即生成change_submits
事件;当双击一行或按回车键时,会生成bind_return_key
事件。
Tree元素
Tree元素和Table元素是近亲。许多在Table元素中找到的参数也适用于Tree元素。特别是标题信息、列宽等。
与表格不同,树没有标准格式。因此,传递给Tree元素的必须构造数据结构。这是使用TreeData类完成的。过程如下:
- 获取TreeData对象
- 将数据“插入”到树中
- 将填充好的TreeData对象传递给Tree元素
TreeData格式
def TreeData()
def Insert(self, parent, key, text, values, icon=None)
要“插入”数据到树中,调用TreeData方法的Insert。
Insert(parent_key, key, display_text, values)
要指示在树的头部插入,使用父键""。因此,树中的每个顶层节点都将有一个父节点=""
此代码创建一个TreeData对象,并填充了3个值
treedata = sg.TreeData()
treedata.Insert("", '_A_', 'A', [1,2,3])
treedata.Insert("", '_B_', 'B', [4,5,6])
treedata.Insert("_A_", '_A1_', 'A1', ['can','be','anything'])
请注意,你可以使用相同的值来显示文本和键。唯一要注意的是,你不能重复键。
当读取窗口时,Table元素将返回用户选择的行列表。如果没有选择任何行,列表将为空。
树条目上的图标
如果你希望在树项旁边显示图标,则在调用Insert
时指定图标。你可以通过可选的icon
参数传递文件名或Base64字节字符串。
以下是显示树条目上图标的结果。
Tab和Tab组元素
Tab是PySimpleGUI的另一个“容器元素”。它能够“包含”一个布局,就像窗口包含一个布局一样。其他容器元素包括Column
和Frame
元素。
就像窗口和其他容器元素一样,Tab
元素有一个布局,由任何所需组合的元素组成,任何所需布局。你可以有Tab在Tab中,在列中,在窗口中等。
Tab
布局看起来与窗口布局完全相同,即它们是元素列表的列表。
将Tab元素放入窗口的方法与其他所有元素不同。你不能直接将Tab放入窗口的布局。
此外,目前不能使标签不可见。它们有一个可见性参数,但调用update不会改变它。
Tab包含在TabGroup中。它们不会放入其他布局。要将Tab放入你的窗口,首先将Tab
元素放入TabGroup
元素中,然后将在TabGroup元素放入窗口布局。
让我们以这个窗口为例
第二个标签的视图
tab1_layout = [[sg.T('This is inside tab 1')]]
tab2_layout = [[sg.T('This is inside tab 2')],
[sg.In(key='in')]]
整个窗口的布局如下所示
layout = [[sg.TabGroup([[sg.Tab('Tab 1', tab1_layout), sg.Tab('Tab 2', tab2_layout)]])],
[sg.Button('Read')]]
窗口布局包含TabGroup,在TabGroup中包含两个Tab元素。
关于所有这些容器元素和窗口布局的一个重要注意事项是...它们都采用“列表的列表”作为布局。它们的布局看起来都像这样 [[ ]]}
当您在调试选项卡窗口时,请将此 [[ ]]}
结构牢记在心。很容易忽略一两个必要的 []
如前所述,旧式的选项卡仅限于在窗口级别。换句话说,选项卡的大小与整个窗口相等。这与“新式”选项卡的情况不同。这就是为什么当您发现您的旧代码不再与新 PySimpleGUI 版本兼容时,您不会感到沮丧。将代码转换一下,花费的几分钟时间是值得的。
看看新选项卡能做什么!
看看选项卡 7 和 8。我们有一个包含选项卡 5 和 6 的列。在选项卡 6 上有...选项卡 7 和 8。
从版本 3.8.0 开始,API 定义中 Tab 和 TabGroup 元素显示的所有选项并不都有效。它们只是占位符。
首先,我们有 Tab 布局定义。它们与屏幕截图中的内容相同。Tab 1 中有 1 个文本元素。Tab 2 有一个文本元素和一个输入元素。
读取 Tab 组
现在,当读取返回时,Tab 组会返回一个值。它们返回当前选中的选项卡。还有一个可以设置的 enable_events
参数,如果该组中的选项卡被选中或更改,则读取会返回。切换到的选项卡的键或标题将被作为值返回
## 窗格元素
版本 3.20 中新增了窗格元素,这是一个超级酷的 tkinter 功能。您在 PySimpleGUIQt 中找不到这个功能,只有 PySimpleGUI 有。很难描述这样的东西。想象一下,它们是“没有标签的选项卡”,可以滑动。
窗格元素中的每个“窗格”都必须是一个列元素。参数 pane_list
是列元素的列表。
如果尝试像这个例子中那样内联声明所有内容,调用可能会变得有点难以看。
sg.Pane([col5, sg.Column([[sg.Pane([col1, col2, col4], handle_size=15, orientation='v', background_color=None, show_handle=True, visible=True, key='_PANE_', border_width=0, relief=sg.RELIEF_GROOVE),]]),col3 ], orientation='h', background_color=None, size=(160,160), relief=sg.RELIEF_RAISED, border_width=0)
结合 visibility 可以创建一个有趣的界面,整个窗格在需要时才会从视图中隐藏。这是产生“动态”窗口的一种方法。
颜色
从版本 2.5 开始,您可以更改窗口和元素的背景颜色。
通过一个函数调用,您的窗口可以从这个
变成这个... ...
虽然您可以在元素级别或窗口级别上进行操作,但更简单的方法是使用 theme
调用或 set_options
。这些调用将为创建的所有窗口设置颜色。
请注意,一旦更改了这些选项,它们在整个程序执行过程中都会更改。所有窗口都将使用该主题,直到您将其更改为其他主题。
此调用设置了一系列不同的颜色选项。
SetOptions(background_color='#9FB8AD',
text_element_background_color='#9FB8AD',
element_background_color='#9FB8AD',
scrollbar_color=None,
input_elements_background_color='#F7F3EC',
progress_meter_color = ('green', 'blue')
button_color=('white','#475841'))
系统托盘
这是 PySimpleGUIQt 和 PySimpleGUIWx 的一个特性。不知道如何使用 tkinter 来做。您的 SystemTray 代码对于 Qt 和 Wx 实现是相同的。您只需更改导入语句即可切换框架。
除了运行普通窗口外,现在还可能有一个图标在系统托盘中,您可以读取它以获取菜单事件。有一个新的 SystemTray 对象,它被用作类似于窗口对象的方式。您首先获取一个,然后执行读取以获取事件。
以下是 SystemTray 对象的定义。
SystemTray(menu=None, filename=None, data=None, data_base64=None, tooltip=None):
'''
SystemTray - create an icon in the system tray
:param menu: Menu definition
:param filename: filename for icon
:param data: in-ram image for icon
:param data_base64: basee-64 data for icon
:param tooltip: tooltip string '''
您会注意到有三种不同的方式可以指定图标图像。base-64 参数允许您在 .py 代码中定义一个变量,该变量是编码的图像,这样您就不需要任何额外的文件。非常实用的功能。
系统托盘设计模式
这里是一个您可以使用的起点设计模式。
此程序将创建一个系统托盘图标并执行阻塞式读取。如果从系统托盘选择“打开”项,则显示一个弹出窗口。
import PySimpleGUIQt as sg
menu_def = ['BLANK', ['&Open', '---', '&Save', ['1', '2', ['a', 'b']], '&Properties', 'E&xit']]
tray = sg.SystemTray(menu=menu_def, filename=r'default_icon.ico')
while True: # The event loop
menu_item = tray.Read()
print(menu_item)
if menu_item == 'Exit':
break
elif menu_item == 'Open':
sg.Popup('Menu item chosen', menu_item)
设计模式创建了一个将显示此菜单的图标:
图标
指定“图标”时,您可以使用3种不同的格式。
filename
- 文件名data_base64
- base64字节字符串- '
data
- 内存中位图或其他“原始”图像
您将在初始化语句和更新方法中找到用于指定这些3个选项的3个参数。
菜单定义
menu_def = ['BLANK', ['&Open', '&Save', ['1', '2', ['a', 'b']], '!&Properties', 'E&xit']]
使用列表定义菜单。一个“菜单条目”是一个字符串,它指定
- 显示的文本
- 键盘快捷键
- 键
有关使用键与菜单一起使用的信息,请参阅菜单键部分。
没有键和键盘快捷键的条目是一个简单的字符串 'Menu Item'
如果要将“M”作为键盘快捷键,在快捷键字母前放置一个 &
。 '&Menu Item'
您可以通过添加“键”来使菜单项独特,或者作为识别菜单项的另一种方式(而不是显示的文本)。键通过在文本部分后放置 ::
来添加。
'Menu Item::key'
第一个条目可以忽略。'BLANK'
被选择为这个示例。这样是因为通常您会在菜单栏的一些标题下指定这些菜单。但在这里没有标题,所以可以用任何您想要的值填充。
分隔符 如果您想在两个项目之间添加分隔符,请添加条目 '---'
,它将在菜单中的该位置添加一个分隔符项。
禁用菜单条目
如果您想禁用菜单条目,请在菜单条目前放置一个 !
SystemTray 方法
读取 - 读取上下文菜单或检查事件
def Read(timeout=None)
'''
Reads the context menu
:param timeout: Optional. Any value other than None indicates a non-blocking read
:return: String representing meny item chosen. None if nothing read.
'''
timeout
参数指定等待事件发生的时间。如果在超时期间没有任何事情发生,则返回一个“超时事件”。这些类型的读取使异步运行成为可能。要在非阻塞模式下运行,请指定Read调用中的timeout=0
。
读取返回所选择的菜单项的完整菜单文本,包括键。如果您将Open::key
指定为菜单条目,并且用户单击了Open
,则在读取完成后,您将接收到字符串Open::key
。
读取特殊返回值
除了菜单项之外,读取调用还可以返回几个特殊值。包括
EVENT_SYSTEM_TRAY_ICON_DOUBLE_CLICKED - 托盘图标被双击 EVENT_SYSTEM_TRAY_ICON_ACTIVATED - 托盘图标被单击一次 EVENT_SYSTEM_TRAY_MESSAGE_CLICKED - 消息气球被单击 TIMEOUT_KEY在读取调用中设置超时值时返回,如果没有可用事件
隐藏
隐藏图标。请注意,在图标隐藏时不会显示消息气球。
def Hide()
关闭
与隐藏相同
def Close()
取消隐藏
显示之前隐藏的图标
def UnHide()
显示消息
在系统托盘区域上方显示气球。您可以在气球中指定自己的图标,或者将messageicon
设置为预置值之一。
此消息有一个自定义图标。
预置messageicon
值包括
SYSTEM_TRAY_MESSAGE_ICON_INFORMATION
SYSTEM_TRAY_MESSAGE_ICON_WARNING
SYSTEM_TRAY_MESSAGE_ICON_CRITICAL
SYSTEM_TRAY_MESSAGE_ICON_NOICON
ShowMessage(title, message, filename=None, data=None, data_base64=None, messageicon=None, time=10000):
'''
Shows a balloon above icon in system tray
:param title: Title shown in balloon
:param message: Message to be displayed
:param filename: Optional icon filename
:param data: Optional in-ram icon
:param data_base64: Optional base64 icon
:param time: How long to display message in milliseconds :return:
'''
注意,在Windows上可能需要更改注册表以启用消息气球可见。为此,您必须创建此截图所示的DWORD。
更新
您可以在SystemTray对象内部更新这些项目中的任何一项。
- 菜单定义
- 图标
- 提示
更改全部或只更改一个。
全局设置
有几种方法可以自定义PySimpleGUI。最细粒度的调用(允许访问特定和精确的设置)。实际上,ChangeLookAndFeel
调用是一个对SetOptions
的单次调用,它改变了13个不同的设置。
Mac用户 - 您无法调用ChangeLookAndFeel
,但可以使用您想要的任何值集调用SetOptions
。没有任何内容被阻止或过滤。
这些设置适用于未来创建的所有窗口。
SetOptions
。选项和元素选项将优先于这些设置。可以将设置视为设置级别的层次结构,其中窗口级别是最高的,元素级别是最低的。因此,级别为
- 全局
- 窗口
- 元素
每个较低的级别将覆盖较高级别的设置。一旦更改了设置,它们将保持更改,直到程序结束(除非再次更改)。
持久窗口(按钮点击后窗口保持打开状态)
对于接下来几页可能有些困惑,我们表示歉意。PySimpleGUI最近在Read调用中进行了多项更改,增加了一些非常酷的功能,但代价是变得不那么简单。部分问题是尝试确保现有代码不会中断。这些更改都在非阻塞读取和带超时读取的领域。
有两种方法可以在用户点击按钮后保持窗口打开。一种方法是使用非阻塞窗口(见下一节)。另一种方法是使用在点击时“读取”窗口而不是“关闭”窗口的按钮。您在窗口中找到的典型按钮,包括快捷按钮,都会关闭窗口。这包括OK、取消、提交等。按钮元素也会关闭窗口。
RButton
元素创建一个按钮,当点击时将返回控制权给用户,但将窗口保持打开和可见。此按钮也用于非阻塞窗口。区别在于读取窗口的调用。没有参数的正常Read
调用将阻塞,具有timeout
值为零的调用将不会阻塞。
请注意,在执行Read
时,InputText
和MultiLine
元素将被清除。如果您不希望在Read
后清除输入字段,则可以在创建这些元素时将do_not_clear
参数设置为True。清除是针对元素逐个进行的。
背后的原因是持久窗口通常是“表单”。在“提交”表单时,您希望所有字段都留空,以便下一次数据输入从新的窗口开始。此外,在实现“聊天窗口”类型的界面时,在每次读取/发送聊天数据后,您希望清除输入字段。将其视为一个短信应用。您想在发送第二条短信时清除先前的文本吗?
持久窗口的设计模式在文档中已经向您展示过……这里为了方便再次列出。
import PySimpleGUI as sg
layout = [[sg.Text('Persistent window')],
[sg.Input()],
[sg.Button('Read'), sg.Exit()]]
window = sg.Window('Window that stays open', layout)
while True:
event, values = window.read()
if event is None or event == 'Exit':
break
print(event, values)
window.Close()
Read(timeout = t, timeout_key=TIMEOUT_KEY)
带有超时的读取对于GUI在读取非阻塞情况下的使用非常好,您可以使用它们。如果您的设备可以等待一段时间,则可以使用此类读取。您能添加的超时值越长,您使用的CPU时间就越少。
关于带有超时的读取的一种思考方式
在超时时间内,您正在“释放”处理器去执行其他任务。
但不仅如此……使用带超时的读取,您的GUI将比使用非阻塞读取更具有响应性
假设您有一个想要每100ms“轮询”的设备。最近之前,唯一的方法和简单的出路是这样的
# YOU SHOULD NOT DO THIS....
while True: # Event Loop
event, values = window.ReadNonBlocking() # DO NOT USE THIS CALL ANYMORE
read_my_hardware() # process my device here
time.sleep(.1) # sleep 1/10 second
本程序将快速测试用户输入,然后处理硬件。然后程序将休眠100毫秒,在此期间您的GUI将无响应,然后程序将再次与您的GUI进行交互。我完全明白这种方式相当粗糙。我们只是在演示,没有尝试使用线程等来“正确”地实现。
新的、更好的方法……使用读取超时机制,睡眠将不再需要。
# This is the right way to poll for hardware
while True: # Event Loop
event, values = window.Read(timeout = 100)
read_my_hardware() # process my device here
此事件循环将每100毫秒运行一次。您正在执行读取调用,因此用户所做的任何操作都会立即返回给您,并且您将等待最多100毫秒以等待用户进行操作。如果用户没有进行任何操作,则读取将超时,执行将返回到程序。
非阻塞Windows(异步读取、超时)
在PySimpleGUI中,您可以轻松地识别非阻塞调用。如果您看到设置超时参数非None
的Window.Read()
调用,则它是一个非阻塞调用。
此读取调用是异步的,因为它有一个超时值
The new way
```python
event, values = sg.Read(timeout=20)
如果您是第一次阅读,请使用新的方式。
这两个调用之间的区别在于事件的值。对于ReadNonBlocking,如果没有其他事件要报告,则事件将为None
。然而,这里有“问题”。对于正常的读取调用,None值表示窗口已关闭。对于ReadNonBlocking,关闭窗口的方式是通过将values变量设置为None。
sg.TIMEOUT_KEY
如果您使用新的timeout=0方法,则None值表示窗口已关闭,就像正常的Read一样。这留下了当没有其他事件发生时它被设置为什么值的问题。这个值将是timeout_key
的值。如果您在读取调用中未指定timeout_key值,则它将设置为默认值:TIMEOUT_KEY = __timeout__
如果您想在循环中测试“没有事件”,则可以写成这样
while True:
event, value = window.Read(timeout=0)
if event is None:
break # the use has closed the window
if event == sg.TIMEOUT_KEY:
print("Nothing happened")
请谨慎使用异步窗口。有可能有一个看似异步的窗口,但实际上不是。 请 在尝试异步窗口之前尝试其他方法。请求这样做的原因是异步窗口会不断轮询tkinter。如果您在Read中没有超时并且您的程序没有其他阻塞操作,那么您将消耗100%的CPU时间。做一个好的公民很重要。不要无谓地消耗CPU周期。有时候您的鼠标想要移动,您知道吗?
非阻塞(timeout=0)通常被保留为“最后的手段”。太多的人使用非阻塞读取,而阻塞读取已经足够。
超时值较小(小于10ms)
不要使用小于10ms的超时。否则,您将简单地反复尝试进行GUI操作,但在超时计时器中断之前无法完成任何事情。结果可能是灾难性的。
有一种混合方法……带有超时的读取。如果您能够使用这种类型的读取使用更少的CPU时间,您将获得更高的分数。
在您直接与硬件交互时,使用非阻塞窗口是最合法的。也许您正在驱动串行总线。如果您查看 Demo_OpenCV_Webcam.py 程序中的事件循环,您会看到读取是一个非阻塞读取。然而,在事件循环中有一个地方会发生阻塞。您将在循环中阻塞的地方是调用从网络摄像头读取帧。当有帧可用时,您希望快速将其发送到输出设备,因此您不希望您的GUI发生阻塞。您希望从硬件的读取发生阻塞。
另一个示例可以在控制 Raspberry Pi 上的机器人的演示中找到。在那个应用程序中,您想要读取方向按钮,前进、后退等,并立即采取行动。如果您正在使用 RealtimeButtons,目前您唯一的选项是使用非阻塞窗口。如果您想要按钮实时响应,必须将超时设置为零。
然而,使用这些按钮,在事件循环中添加睡眠时间至少会给其他进程执行的时间。然而,这会导致您的GUI饿死。在整个睡眠期间,您的GUI都没有执行。
周期性调用Read
假设您最终使用非阻塞读取...那么您有一些维护要做。您必须定期“刷新”可见的GUI。您更新GUI之间的等待时间越长,窗口感觉就越迟钝。您必须自己调用这些调用,否则您的GUI将冻结。
与非阻塞窗口交互有两种方法。
- 像读取正常窗口一样读取窗口
- 不读取窗口的值来“刷新”窗口。这是一个快速操作,旨在向用户显示最新值
使用异步窗口时,窗口显示,读取用户输入,但您的代码继续运行。您的责任是定期调用 PySimpleGUI.Read
。每秒几次或更多会产生一个响应速度合理的GUI。
退出(关闭)持久性窗口
如果您的窗口有一个关闭窗口的按钮,那么 PySimpleGUI 将自动为您关闭窗口。如果您所有的按钮都是 ReadButtons,那么在完成后关闭窗口将由您负责。要关闭窗口,请调用 Close
方法。
window.Close()
持久性窗口示例 - 运行更新计时器
查看 GitHub 上的示例代码 Demo Media Player,以了解异步窗口的另一个示例。我们将创建一个窗口,并每 0.01 秒更新窗口的一个元素。这里是完成这个任务的完整代码。
import PySimpleGUI as sg
import time
# ---------------- Create Form ----------------
sg.ChangeLookAndFeel('Black')
sg.SetOptions(element_padding=(0, 0))
layout = [[sg.Text('')],
[sg.Text(size=(8, 2), font=('Helvetica', 20), justification='center', key='text')],
[sg.ReadButton('Pause', key='button', button_color=('white', '#001480')),
sg.ReadButton('Reset', button_color=('white', '#007339'), key='Reset'),
sg.Exit(button_color=('white', 'firebrick4'), key='Exit')]]
window = sg.Window('Running Timer', layout, no_titlebar=True, auto_size_buttons=False, keep_on_top=True, grab_anywhere=True)
# ---------------- main loop ----------------
current_time = 0
paused = False
start_time = int(round(time.time() * 100))
while (True):
# --------- Read and update window --------
event, values = window.Read(timeout=10)
current_time = int(round(time.time() * 100)) - start_time
# --------- Display timer in window --------
window.FindElement('text').Update('{:02d}:{:02d}.{:02d}'.format((current_time // 100) // 60,
(current_time // 100) % 60,
current_time % 100))
以前这个程序是通过在循环中添加睡眠来控制时钟滴答的。这个版本使用新的超时参数。结果是窗口比使用睡眠的窗口反应更快,精度也相当好。
而不是非阻塞读取 --- 使用 enable_events = True
或 return_keyboard_events = True
每次您想“我想让 X 元素引起 Y 元素做某事”时,您都想使用 enable_events
选项。
与其轮询,尝试使窗口返回给您的选项。 通过使用非阻塞窗口,您正在进行 轮询。您确实可以通过轮询创建您的应用程序。它会工作。但您将耗尽您的处理器,甚至可能比使用其他技术更慢地响应用件。
示例
一个示例是您有一个输入字段,当您在屏幕键盘上按下按钮时,它会更改。
更新元素(在活动窗口中更改元素的值)
如果您想在窗口创建后更改窗口中元素的设置,那么您将调用元素的 Update 方法。
注意在进行任何更新调用之前,必须先读取或最终确定窗口。另外,您在创建元素时可以使用的并非所有设置都可通过其Update
方法访问。
以下是更新文本元素的示例
import PySimpleGUI as sg
layout = [ [sg.Text('My layout', key='_TEXT_')],
[sg.Button('Read')]]
window = sg.Window('My new window', layout)
while True: # Event Loop
event, values = window.read()
if event is None:
break
window.Element('_TEXT_').Update('My new text value')
请注意更新调用的位置。如果您想在读取调用之前(在事件循环之外)更新文本元素,则必须首先在窗口上调用Finalize。
在此示例中,更新是在读取之前完成的。因此,将Finalize调用添加到窗口创建中。
import PySimpleGUI as sg
layout = [ [sg.Text('My layout', key='_TEXT_')],
[sg.Button('Read')]
]
window = sg.Window('My new window', layout).Finalize()
window.Element('_TEXT_').Update('My new text value')
while True: # Event Loop
event, values = window.read()
if event is None:
break
持久性窗口在读取返回后保持打开状态,并继续与用户交互。通常程序希望传达结果(输出信息)或更改元素值(例如填充列表元素)。
您可以使用更新执行以下操作:
- 让一个元素(看似)更改另一个元素
- 禁用按钮、滑块、输入字段等
- 更改按钮的文本
- 更改元素的文本或背景颜色
- 向滚动输出窗口添加文本
- 更改列表中的选项
- 等等
这几乎适用于所有元素的一个更新方法。以下是一个使用持久窗口并对其进行更新的程序的示例。
在某些程序中,这些更新是对另一个元素的响应。此程序使用Spinner和滑块的输入值来调整文本元素的大小。Spinner和滑块位于左侧,要更改的文本元素位于右侧。
# Testing async window, see if can have a slider
# that adjusts the size of text displayed
import PySimpleGUI as sg
fontSize = 12
layout = [[sg.Spin([sz for sz in range(6, 172)], font=('Helvetica 20'), initial_value=fontSize, change_submits=True, key='spin'),
sg.Slider(range=(6,172), orientation='h', size=(10,20),
change_submits=True, key='slider', font=('Helvetica 20')),
sg.Text("Aa", size=(2, 1), font="Helvetica " + str(fontSize), key='text')]]
sz = fontSize
window = sg.Window("Font size selector", layout, grab_anywhere=False)
# Event Loop
while True:
event, values= window.read()
if event is None:
break
sz_spin = int(values['spin'])
sz_slider = int(values['slider'])
sz = sz_spin if sz_spin != fontSize else sz_slider
if sz != fontSize:
fontSize = sz
font = "Helvetica " + str(fontSize)
window.FindElement('text').Update(font=font)
window.FindElement('slider').Update(sz)
window.FindElement('spin').Update(sz)
print("Done.")
在事件循环内,我们使用这些元素的键读取Spinner和滑块的值。例如,values['slider']
是滑块元素的值。
如果滑块或Spinner更改,则此程序将更改所有3个元素。这是通过以下语句完成的
window.FindElement('text').Update(font=font)
window.FindElement('slider').Update(sz)
window.FindElement('spin').Update(sz)
请记住这个设计模式,因为如果您使用持久窗口,您将经常使用它。
它的工作方式如下。对window.FindElement
的调用返回代表提供的key
的元素对象。然后通过调用其Update
方法来更新此元素。这是Python的“链式”功能的一个示例。我们可以使用长格式编写此代码
text_element = window.FindElement('text')
text_element.Update(font=font)
从这个练习中得到的教训是,在PySimpleGUI的设计中,键至关重要。它们用于读取窗口的值以及标识元素。如前所述,它们用作按钮调用的目标。
定位元素(FindElement == Element == Elem)
用于查找元素的窗口方法调用是:FindElement
或简化的版本Element
,甚至更短(版本4.1+)Elem
当您看到对window.FindElement或window.Element的调用时,则知道正在处理一个元素。通常这是为了调用元素的Update方法。
进度条/进度表
注意,要更改进度表进度,您应调用UpdateBar
而不是Update
。
键盘和鼠标捕获
注意 - 键盘捕获在端口中格式独特。对于基本的字母和数字,没有太大差异,但开始添加Shift和Control或特殊键时,它们的行为略有不同。您最好的办法是简单地打印出返回的内容,以确定特定端口的格式。
从版本2.10开始,您可以捕获键盘按键和鼠标滚轮事件。键盘键可以用来检测PDF查看器的页面向上和页面向下键。要使用此功能,在窗口调用中有一个布尔设置return_keyboard_events
被设置为True,以便在按钮一起返回键。
键和滚轮事件以与按钮完全相同的方式返回。
对于滚轮事件,如果鼠标向上滚动,则 button
文本将是 MouseWheel:Up
。对于向下滚动,返回的文本是 MouseWheel:Down
键盘键返回两种类型的键事件。对于“普通”键(如a、b、c等),返回一个表示该键的单个字符。修饰键和特殊键以包含两个部分字符串的形式返回。
Key Sym:Key Code
Key Sym 是一个如 'Control_L' 的字符串。键码是该键的数值表示。当左控制键被按下时,将返回值 'Control_L:17'。
import PySimpleGUI as sg
# Recipe for getting keys, one at a time as they are released
# If want to use the space bar, then be sure and disable the "default focus"
text_elem = sg.Text(size=(18, 1))
layout = [[sg.Text("Press a key or scroll mouse")],
[text_elem],
[sg.Button("OK")]]
window = sg.Window("Keyboard Test", layout, return_keyboard_events=True, use_default_focus=False)
# ---===--- Loop taking in user input --- #
while True:
event, value = window.read()
if event == "OK" or event is None:
print(event, "exiting")
break
text_elem.Update(event)
您想要关闭默认的焦点,这样在按空格键时不会选择任何按钮。
菜单
MenuBar
从版本 3.01 开始,您可以将 MenuBar 添加到您的窗口中。您以与您进行窗口布局相同的方式指定菜单,即使用列表。菜单选择作为事件返回,自 3.17 版本起,也作为值字典中的值返回。返回的值将是整个菜单条目,包括如果您指定了键,则包括该键。
menu_def = [['File', ['Open', 'Save', 'Exit',]],
['Edit', ['Paste', ['Special', 'Normal',], 'Undo'],],
['Help', 'About...'],]
请注意逗号和方括号的位置。实现级联菜单的嵌套菜单可能有点棘手。看看粘贴后面跟随的 Special 和 Normal 列表。这意味着 Paste 有一个包含 Special 和 Normal 项的级联菜单。
方法
要将菜单添加到窗口中,将 Menu
或 MenuBar
元素放入您的布局中。
layout = [[sg.Menu(menu_def)]]
您在布局中的位置实际上并不重要,因为它始终位于窗口的顶部。
当用户选择一个项目时,它作为事件返回(如果菜单定义中指定了键,则包括菜单项的键)。
ButtonMenus
ButtonMenus 是在版本 3.21 中引入的,之前已在 PySimpleGUIQt 中发布。它们的工作方式完全相同,并且在 PySimpleGUI 和 PySimpleGUIQt 之间具有源代码兼容性。这类菜单只接受单个菜单条目,而 MenuBar 接受菜单条目的列表。
ButtonMenus 的返回值与 MenuBars 不同。
您将得到 ButtonMenu 的 KEY 作为事件。要获取实际选中的项目,您将在值字典中查找它。这可以通过表达式 values[event]
完成。
右键菜单
右键菜单是在版本 3.21 中引入的。几乎每个元素都有一个 right_click_menu 参数,并且有一个窗口级设置用于右键菜单,该设置将右键菜单附加到窗口中的所有元素。
菜单定义与按钮菜单定义相同,都是单个菜单条目。
right_click_menu = ['&Right', ['Right', '!&Click', '&Menu', 'E&xit', 'Properties']]
右键菜单和按钮菜单中的第一个字符串被 忽略。它不被使用。通常,您会在该位置放置显示在菜单栏上的字符串。
右键菜单的返回值与 MenuBars 相同。所选的值作为事件返回。
菜单快捷键
您在其他 Windows 程序中使用 ALT 键导航菜单。例如,Alt-F+X 退出程序。Alt-F 会下拉文件菜单。X 选择标记为退出的条目。
好消息是 PySimpleGUI 允许您创建相同类型的菜单!您的程序可以与“大玩家”一较高下。而且,这非常简单。
您需要做的就是,在您想要出现下划线的字母前面添加一个 "&"。当您按下 Alt 键时,您将看到带有您标记的下划线的菜单。
您可以添加的另一个小装饰是您的列表中的分隔符。要在菜单选择列表中添加一行,创建一个看起来像这样的菜单条目: '---'
这是一个带有下划线和分隔符的示例菜单。
# ------ Menu Definition ------ #
menu_def = [['&File', ['&Open', '&Save', '---', 'Properties', 'E&xit' ]],
['&Edit', ['Paste', ['Special', 'Normal',], 'Undo'],],
['&Help', '&About...'],]
这就是它生成的时尚菜单:
禁用菜单项
如果您想禁用您的菜单项之一,请在菜单项前放置一个'!'。要禁用上一个示例中的粘贴菜单项,项将是:['!&编辑', ['粘贴', ['特殊', '正常',], '撤销'],]
如果您想将禁用菜单项标志/字符从'!'更改为其他内容,请更改变量MENU_DISABLED_CHARACTER
菜单键
从版本3.17开始,您可以为您的菜单项添加一个key
。在将其插入菜单之前,将删除key
值。当您收到菜单事件时,整个菜单项,包括key
都会返回。键是通过在菜单项后添加::
来指示的,后跟键。
要将key
_MY_KEY_
添加到特殊菜单项,代码将是:
['&编辑', ['粘贴', ['特殊::_MY_KEY_', '正常',], '撤销'],]
如果您想将指示键跟随的字符从'::'更改为其他内容,请更改变量MENU_KEY_SEPARATOR
菜单定义
在阅读了菜单部分后,您可能已经注意到右键菜单和按钮菜单的格式有点奇怪,因为其中有一部分没有被使用(第一个字符串)。也许示例中应该有“未使用”这个词。但是,保留这些词也有它的原因。
原因在于架构,但这也给用户带来了便利。您可以将单个菜单项(按钮和右键)放入列表中,这样您就有了一个菜单栏定义。
这将使您能够从一系列这些单个菜单定义中创建一个菜单栏
menu_bar = [right_click_menu_1, right_click_menu_2, button_menu_def ]
当然,方向也可以相反。您可以从菜单栏定义中提取单个菜单项来创建右键或按钮菜单。
运行多个窗口
这里PySimpleGUI继续保持简单,但问题空间已经进入了“复杂”领域。
如果您希望在事件循环中运行多个窗口,那么有两种方法可以实现。
- 第一个窗口在第二个窗口可见时不保持活动状态
- 第一个窗口在第二个窗口可见时保持活动状态
您将在GitHub(http://www.PySimpleGUI.com)的“演示程序”区域中的两个演示程序中找到这两个设计问题。
至关重要 在创建新窗口时,您必须每次都使用“新鲜”布局。您不能重复使用之前窗口的布局。因此,您将看到窗口2的布局定义在较大的事件循环中。
如果您有一个用于窗口的布局并且您已经关闭了窗口,您不能使用该窗口中的特定元素。您必须每次创建新窗口时都重新创建您的layout
变量。请再次阅读这句话....您每次创建新窗口时都必须重新创建您的layout
变量。这意味着您应该有一个以layout =
开头的语句。很抱歉在这个问题上纠缠不清,但很多人似乎很难遵循这个简单的说明。
窗口布局的黄金法则
绝不能重复使用窗口布局....永远!
或者更具体地说....
如果您正在调用
Window
,那么您应该在Window
调用之前的语句中定义您的窗口布局。
多个窗口的演示程序
有几个“演示程序”可以帮助您运行多个窗口。请下载这些程序并遵循它们为您创建的示例。
在查看演示程序时,您会发现以下是一些代码模式。
多窗口设计模式1 - 两个窗口都处于活动状态
import PySimpleGUI as sg
# Design pattern 2 - First window remains active
layout = [[ sg.Text('Window 1'),],
[sg.Input(do_not_clear=True)],
[sg.Text(size=(15,1), key='_OUTPUT_')],
[sg.Button('Launch 2'), sg.Button('Exit')]]
win1 = sg.Window('Window 1', layout)
win2_active = False
while True:
ev1, vals1 = win1.Read(timeout=100)
win1.FindElement('_OUTPUT_').Update(vals1[0])
if ev1 is None or ev1 == 'Exit':
break
if not win2_active and ev1 == 'Launch 2':
win2_active = True
layout2 = [[sg.Text('Window 2')],
[sg.Button('Exit')]]
win2 = sg.Window('Window 2', layout2)
if win2_active:
ev2, vals2 = win2.Read(timeout=100)
if ev2 is None or ev2 == 'Exit':
win2_active = False
win2.Close()
多窗口设计模式2 - 仅1个活动窗口
import PySimpleGUIQt as sg
# Design pattern 1 - First window does not remain active
layout = [[ sg.Text('Window 1'),],
[sg.Input(do_not_clear=True)],
[sg.Text(size=(15,1), key='_OUTPUT_')],
[sg.Button('Launch 2')]]
win1 = sg.Window('Window 1', layout)
win2_active=False
while True:
ev1, vals1 = win1.Read(timeout=100)
if ev1 is None:
break
win1.FindElement('_OUTPUT_').Update(vals1[0])
if ev1 == 'Launch 2' and not win2_active:
win2_active = True
win1.Hide()
layout2 = [[sg.Text('Window 2')], # note must create a layout from scratch every time. No reuse
[sg.Button('Exit')]]
win2 = sg.Window('Window 2', layout2)
while True:
ev2, vals2 = win2.Read()
if ev2 is None or ev2 == 'Exit':
win2.Close()
win2_active = False
win1.UnHide()
break
PySimpleGUI调试器
如果你是
- 高级程序员,正在调试一些非常复杂的代码
- 来自其他时代的程序员,喜欢这种方式进行调试
- 想要对代码有“X光视野”的人
- 被要求使用调试器来收集信息
- 在缺少任何调试器的平台上运行
- 调试仅在调试器环境之外发生的问题
- 发现自己说“但是它在PyCharm运行时是正常的”
自2019年6月1日起,PySimpleGUI的每个副本都内置了一个调试器版本imwatchingyou
。它被大大淡化,以评估添加的代码和功能以及使用几个键是否会打扰任何用户。自那时起,已有超过30,000用户安装了PySimpleGUI,并且没有提交任何问题,也没有评论或投诉,所以对普通用户来说似乎足够安全……到目前为止……
到目前为止,没有人报告过关于调试器的任何问题。假设它正静静地处于休眠状态,等待你按下BREAK
或CONTROL
+ BREAK
键。很奇怪没有人意外地做了这件事并惊慌,记录了一个问题。
PySimpleGUI的普通模块内置了调试器。对于其他端口,请使用包imwatchingyou
。
这是什么?为什么要使用它?什么鬼?我已经有一个IDE了。
这个调试器为大多数典型的Python开发者提供了独特的能力,可以在代码运行时“看到”并与代码交互。你可以在代码继续运行的同时更改变量值。
打印语句很酷,但你可能已经厌倦了看到event
和values
的打印输出
Push Me {0: 'Input here'}
Push Me {0: 'Input here'}
Push Me {0: 'Input here'}
你更愿意看到这个窗口在显示器的右上角持续更新
注意使用这个窗口有多容易,可以轻松地获取你的PySimpleGUI包来自的确切位置绝对不是猜测。预计这个窗口将在你的调试未来中出现,因为它会不时被请求。
准备运行调试器
如果你的程序正在使用阻塞的Read
调用,那么你将希望为你的读取添加一个超时。这是因为调试器通过从这些异步调用中窃取一点时间来获得它的周期……但只有在你打开一个调试器窗口时才这样做,所以不要抱怨浪费CPU时间,因为没有。
你的事件循环将从这个阻塞
while True:
event, values = window.read()
变为非阻塞
while True:
event, values = window.Read(timeout=200)
if event == sg.TIMEOUT_KEY:
continue
这三行代码绝不会以任何方式改变你的应用程序的外观和性能。你可以对任何使用阻塞读取的PySimpleGUI应用程序这样做,你不会注意到任何区别。这是因为这是一个NOP(无操作),即当发生超时时,事件将被设置为sg.TIMEOUT_KEY
。如果返回的事件是超时,代码简单地忽略它并通过执行一个continue
语句重新启动循环。
这个200毫秒的超时意味着如果没有任何事情发生,你的调试器GUI将每秒更新5次。如果你觉得这会给你的应用程序添加太多“拖累”,你可以将超时设置得更大。尝试使用500或1000而不是100。
如果你没有添加超时会发生什么
假设你遇到一个非常间歇性的错误,调试器会非常有帮助,但你没有在windows.Read()
调用上设置超时。没关系。回想一下,调试器获得“周期”的方式是从你的Read
调用中借用。你需要做的是在调试器和生成另一个事件循环遍历之间交替使用。
可能是一个OK按钮,会导致你的循环再次执行(不退出)。如果是这样,你可以使用它来帮助调试器前进。
是的,这确实很痛苦,但并不是那么糟糕,与危机时刻的“无”相比,这可能是你的“救星工具”,将拯救你的生命,按几次OK按钮对你来说将微不足道。你只想输出一个变量,该变量包含你的类的一个实例!
一个我们可用的示例程序
现在你已经了解了如何将调试器添加到你的程序中,让我们创建一个简单的程序,你可以用它来跟随这些示例。
import PySimpleGUI as sg
window = sg.Window('Testing the Debugger', [[sg.Text('Debugger Tester'), sg.In('Input here'), sg.B('Push Me')]])
while True:
event, values = window.Read(timeout=500)
if event == sg.TIMEOUT_KEY:
continue
if event is None:
break
print(event, values)
window.Close()
调试器窗口
"弹出调试器窗口"
有两个调试器窗口。一个称为“弹出”调试器窗口。弹出窗口尽可能显示所有当前作用域内的局部变量。这个窗口是非交互式的。它旨在成为你的变量频繁更新的“仪表板”或“快照”。
弹出窗口中显示的一个“变量”是调试问题时经常需要的信息,这个变量是sg
(或者你在导入PySimpleGUI包时命名的任何名称)。假设你的导入是import PySimpleGUI as sg
。如果你的导入不同,那么你会看到不同的变量。重点是它在这里显示。
退出此窗口是通过小红色X完成的,或者使用右键菜单,这也可以用作启动主调试器窗口的一种方式。
启动弹出窗口的方式
有三种打开弹出窗口的方式。
- 按键盘上的
BREAK
键。 - 调用函数
show_debugger_popout_window(location=(x,y))
- 将
Debug()
按钮添加到你的布局中 - 在你的窗口中添加一个紫色和黄色的PySimpleGUI标志
当你被要求输入“PySimpleGUI包或PySimpleGUI.py文件的路径”时,请这样做
如果你希望使用调试器找到运行程序中PySimpleGUI包/ PySimpleGUI.py文件的路径,那么你只需要做
- 按键盘上的
BREAK
键。- 这有时被称为
Cancel
键 - 键上可能还印有
Pause
- 在一些美国键盘上,它位于
Scroll Lock
旁边和/或位于PageUp
键上方
- 这有时被称为
- 这将打开一个位于屏幕右上角、看起来像这样的窗口:
- 你正在寻找的信息显示在窗口中
sg
旁边。你不需要修改你的程序来使用此技术获取此信息。
如果你的变量的值太长而无法容纳,那么你需要使用“主调试器窗口”来收集此信息。
弹出调试器窗口中没有列出什么
弹出窗口是打开窗口时你的局部变量的“快照”。这意味着在弹出窗口创建时不存在任何变量将不会显示。此窗口不会通过添加新变量而扩展大小。也许在未来。
“主调试器窗口”
现在我们正在谈论严肃的Python调试!
是否曾希望有一个可以在程序运行时运行的 repl>>>
提示符。嗯,这正是您在 PySimpleGUI 调试器的主窗口中得到的!酷吧?如果您不觉得有什么了不起,那就去喝杯咖啡,把头脑中的干扰抛开,因为我们接下来要做的可是真正酷炫的事情……
您会发现这个窗口有两个标签页,一个是名为 Variables
的标签页,另一个是名为 REPL & Watches
的标签页。
打开主调试窗口的方法
有三种方法可以打开主调试窗口:
- 在 PC 键盘上按
Control
+Break
- 从弹出调试窗口,右键单击,并在右键菜单中选择
Debugger
- 在您的代码中调用
show_debugger_window(location=(x,y))
主调试窗口的“Variables”标签页
注意,围绕此窗口的“frame”被标记为蓝色,并标注为“Auto Watches”。就像弹出窗口一样,这个调试窗口也会“监视”变量,这意味着在您调用 Window.Read
时,它们会不断更新。
任何一次最多可以监视 9 个“监视器”。
选择要监视的变量
您可以简单地点击“Show All Variable”按钮,列表中将被自动填充为找到的前 9 个变量。或者,您可以点击“Choose Variables to Auto Watch”按钮,在那里您可以单独选择要显示的变量和表达式。
在这个窗口中,我们通过勾选复选框来显示这些变量
event
,sg
,values
,window
,__file__
此外,您可以在窗口底部看到一个自定义的“监视器”已经被定义。这可以是您想要的任何表达式。比如说,您有一个包含大量值的窗口。而不是在 values
变量中查找具有您所需键的条目,您可以显示特定键的值。
在这个例子中,自定义监视器输入了 values[0]
。在点击“OK”按钮,表示选择了我们想要监视的变量后,这就是显示的主窗口
我们可以看到我们勾选的变量以及定义的表达式 values[0]
。如果您保持此窗口打开,这些值将随时更新,每次我们调用示例代码中的 window.Read(timeout=500)
行。这意味着主调试窗口和定义的这些变量将每 500 毫秒更新一次。
REPL & Watches 标签页
这个标签页为您提供了一种与正在运行的程序实时交互的方式。
如果您想快速查看变量的值,几乎任何变量的值,那么请将信息输入到提供的三个空白之一,以“监视”变量或表达式。在这个例子中,变量窗口被输入到第一个空白中。
立即在输入字符 'w' 后,右侧的信息就被显示了。不需要点击任何按钮。您只需输入一个有效的表达式,它就会显示给您……并且会持续不断地刷新。
如果输入框右侧的区域太小,那么您可以点击“Detail”按钮,您将看到一个弹出窗口,其中包含所有信息的滚动窗口,就像它们被打印出来一样。
我敢肯定您有过打印对象的美好体验。当点击显示 window
变量的“Detail”按钮旁边时,此窗口就会显示
哦,Python,- sigh-. 我只想看到我的 window
对象被打印出来。
救星 Obj
按钮!
PySimpleGUI有一个有趣且非常有用的功能,在文档中称为ObjToString
,它可以将对象的内容转换为格式良好的字符串。这个函数用于在点击Obj
按钮时创建文本输出。结果是这样的,而不是之前显示的微型窗口:
REPL 提示符
虽然这个窗口的REPL >>>
提示符并不是真正的Python REPL提示符,但它旨在尽可能地模仿一个。在这里,你可以输入表达式和代码。
这个提示符的用途非常多样,这里就不一一列举了。
您程序的“XRay”和“内窥镜”
把这个提示符看作一种获取您正在运行的程序的具体诊断信息的方法。重要的是要强调,这个工具的强大和实用性在于它能够诊断正在运行的程序,在您已经开始运行它之后。
执行代码
除了显示信息、获取包路径、查找版本信息之外,您还可以从PySimpleGUI调试器的REPL >>>
提示符中执行代码。您可以输入任何表达式以及任何可执行语句。
例如,想在运行程序时查看PopupError
的样子。在REPL提示符中,键入:sg.PopupError('这是一个错误弹窗')
结果是,您将看到一个包含您提供的文本的弹窗窗口。
了解您程序的问题答案
使用这个运行时工具,您可以对收集到的数据有信心。对吧?
没有比询问您的程序使用哪个包版本更好的方法了。这真的是这样。想想看。与其进入PyCharm,查看项目的“虚拟环境”,遵循一些路径到达一个列出该项目安装的包的窗口,获取版本然后完成,对吧?嗯,也许吧。但你确定你的程序正在使用那个包的版本吗?
在过去,人们明明知道他们运行的是哪个版本,或者他们完全不知道版本,或者不知道如何找到答案,浪费了太多的时间。没有不会做某事的问题。我们所有人都从这里开始。唉...
一个真实世界的例子.....
如何使用调试器查找包的版本号
让我们现在总结我们所学的,使用调试器来解决经常发生的问题,有时候找到答案并不是那么明显。
我们使用Matplotlib,想要找到“版本”。
对于这个例子,我们使用该节中“供我们使用的示例程序”部分的12行小程序。
该程序没有导入matplotlib
。我们有两个选择,我们可以修改代码,也可以从调试器中导入包。让我们使用调试器。
通过按CONTROL+BREAK
键打开主调试器窗口。然后点击“REPL * 观察器”标签。在>>>
提示符中,我们首先通过键入import matplotlib as m
来导入包
Python调用返回值None时,返回的结果是None。您将在输出区域看到您输入的命令后面跟着“None”,表示成功。
最后,键入:m.__version__
整个操作过程都在这个窗口中显示
按照惯例,您会发现许多模块都有一个包含包版本号的变量__version__
。PySimpleGUI有一个。如您所见,matplotlib也有一个。requests模块也有这个变量。
为了最大程度的兼容性,PySimpleGUI不仅使用__version__
,还有一个包含版本号的变量version
,因为在某些情况下__version__
可能不可用,但version
变量是可用的。
建议您使用变量 version
来获取 PySimpleGUI 版本,因为到目前为止,这是最成功的方法。
然而,tkinter 并不……当然不……遵循这个约定。不,要获取 tkinter 版本,您需要查看变量:TkVersion
这是调试器中 REPL 的输出,显示了 tkinter 版本
>>> import tkinter as t
None
>>> t.TkVersion
8.6
>>> t.__version__
Exception module 'tkinter' has no attribute '__version__'
扩展 PySimpleGUI
PySimpleGUI 并不能也不能提供底层 GUI 框架中可用的每个设置。不是所有 tkinter 选项都适用于 Text
元素。PySimpleGUIQt 和其他端口也是如此。
这里有几个原因。
- 时间 & 资源限制 - PySimpleGUI 开发团队的人数极其有限
- PySimpleGUI 提供了一个“统一 API”。这意味着理论上,代码可以在所有 PySimpleGUI 端口之间迁移,而无需更改用户的代码(除了导入)
- PySimpleGUI 是按设计简单,并覆盖了 80% 的 GUI 问题。
然而,PySimpleGUI 程序并不是 死胡同!!编写 PySimpleGUI 代码并到达您真的真的想扩展 Listbox 以包含更改“选中”颜色的能力。这可能对您的项目至关重要。也许您发现得太晚,基本的 PySimpleGUI 代码没有公开那个 tkinter 能力。别担心!这条路还在继续!!
小部件访问
大多数用户扩展/增强都是在“元素”级别。您希望某些元素执行您无法使用现有 PySimpleGUI API 完成的技巧。这是不可能的。怎么办?
您需要访问底层 GUI 框架的“小部件”。好消息是,您已经准备好并等待访问所有 PySimpleGUI 端口的小部件,而不仅仅是 tkinter。
Element.Widget
是 GUI 小部件
类变量 Widget
包含 tkinter、Qt、WxPython 或 Remi 小部件。有了这个变量,您可以直接修改该小部件。
您必须首先 Read
或 Finalize
窗口才能访问 Widget
类变量
Finalize 要求的原因是,直到窗口被 Read 或 Finalized,实际上它并没有被创建和填充 GUI 小部件。GUI 小部件是在您执行这两个操作时创建的。
旁白 - 您可以停止使用添加到窗口创建中的 .Finalize()
调用,而是使用 Window
调用中的 finalize
参数。
旧方法
window = sg.Window('Window Title', layout).Finalize()
新方法
window = sg.Window('Window Title', layout, finalize=True)
这更干净,对新手来说也更简单,他们可能没有接受过如何链式调用培训。PySimpleGUI。
Element.Widget
的示例使用
到目前为止,已经使用了两种此功能。一种已经提到是添加新功能。另一种使用方式是修复错误或为古怪行为创建一个解决方案。
最近发布的一个问题是在 tkinter 中切换标签时,焦点总是设置在标签中的一个按钮上。用户不希望这样发生,因为它在他们精心制作的图形按钮周围放置了一个难看的黑色线条。
在 PySimpleGUI 中目前没有方法可以“禁用元素上的焦点”。这正是所需的功能,告诉 tkinter 这个小部件永远不会获得焦点。
有一种方法可以告诉 tkinter 一个小部件不应获得焦点。缺点是如果您使用 Tab 键进行导航,该元素将永远不会获得焦点。因此,它不仅阻止了自动问题的焦点,还阻止了所有使用方式的焦点。当然,您仍然可以点击按钮。
这个用户通过直接修改 tkinter 小部件并告诉它不要获得焦点来解决这个问题。这是用一行代码完成的
window[button_key].Widget.config(takefocus=0)
这个解决方案的绝对优点是,对于这个语句的执行,tkinter不需要被导入到用户的程序中。Python已经知道.Widget
对象是什么类型,因此可以向您展示该对象的各个方法和类变量。几乎所有tkinter选项都是字符串,所以您不需要导入tkinter来获取任何枚举。
查找您的元素的Widget类型
当然,为了调用方法或访问对象的类变量,您需要知道正在使用的底层Widget的类型。本文件可以列出它们,但缺点是Widget可能会改变类型(这对已经使用.Widget
的人来说不是好事!)。这也有助于节省空间和时间,以便发布和提供此文档。
所以,这是获取您的元素widget类型的方法
print(type(window[your_element_key].Widget))
在上面的按钮示例中,打印的内容是
<class 'tkinter.Button'>
我想这已经很清晰了。您现在的任务是查看tkinter文档,了解tkinter Button
widget的方法。
窗口级别访问
对于这个,您目前需要一些特定变量,因为没有Window
类变量来持有在GUI库中窗口的表示。
对于tkinter,目前,窗口的root对象是
sg.Window.TKroot
在PySimpleGUI中,类型可能会有所不同。它将是:tkinter.Tk()
或 tkinter.Toplevel()
无论哪种方式,您都将使用相同的Window
变量sg.Window.TKroot
来访问它
请关注未来的这个对象的更标准化的变量名称。它可能是像Window.Widget
这样的东西,因为元素使用,或者像Window.GUIWindow
这样的东西。
绑定tkinter "事件"
如果您希望直接从tkinter接收事件,但以PySimpleGUI的方式处理,那么您可以这样做,并通过您的标准Window.read()
调用将事件返回给您。
元素和窗口对象都有一个名为bind
的方法。您需要为此函数指定两个参数。一个是用于告诉tkinter绑定哪些事件的字符串。另一个是对元素是“键修饰符”,对窗口是“键”。
在Element.bind
调用中的key_modifier
是添加到您的键上的东西。如果您的键是一个字符串,那么这个修饰符将被附加到您的键上,事件将是一个单独的字符串。
如果您的元素的键不是一个字符串,那么将返回一个元组作为事件(your_key, key_modifier)
这将使您能够继续使用您那些奇怪的非字符串键。只是要注意在这些情况下,您将得到一个元组而不是您的键。
这种情况的最佳例子是在扫雷游戏中,其中每个按钮都已经是一个包含按钮(x,y)位置的元组。正常的左键点击将返回(x,y)。作为绑定调用结果生成的右键点击将返回((x,y), key_modifier)。
对于用户来说,解析这些事件可能很棘手,但假设如果您使用这种功能并且使用非字符串键,那么您是一个高级用户。
还添加了两个成员变量,如绑定方法的文档所示。这个附加变量包含tkinter特定的事件信息。换句话说,当回调发生时,tkinter通常发送回的'事件'。
以下是显示如何进行这些调用的示例代码。
绑定了三个事件。
- 窗口中任何按钮的点击都会在window.read()返回一个事件"Window Click"。
- 右键点击"Go"按钮将返回一个事件"Go+RIGHT CLICK+"从window.read()。
- 当输入元素获得焦点时,将从window.read()返回一个事件"-IN-+FOCUS+"。
import PySimpleGUI as sg
sg.theme('Dark Green 2')
layout = [ [sg.Text('My Window')],
[sg.Input(key='-IN-'), sg.Text(size=(15,1), key='-OUT-')],
[sg.Button('Go'), sg.Button('Exit')]
]
window = sg.Window('Window Title', layout, finalize=True)
window['-IN-'].bind("<FocusIn>", '+FOCUS+')
window.bind("<Button-1>", 'Window Click')
window['Go'].bind("<Button-3>", '+RIGHT CLICK+')
while True: # Event Loop
event, values = window.read()
print(event, values)
if event in (None, 'Exit'):
break
window.close(); del window
目前无法“解除绑定”事件。(抱歉,发布前没考虑到这一点)
元素和函数调用参考
此参考部分之前与文本说明、图表、代码示例等混合在一起。一开始这样做是可以的,但现在元素越来越多,方法也经常添加,如果周围有大量文本,则保持此列表更新是一件困难的事情。
希望这能带来改进,用户能更快地找到所需信息。
注意,本文档部分是使用 GitHub 发布的 PySimpleGUI.py 文件 创建的。一些调用可能对您或您的端口(Qt、Wx、Web)不可用。并且一些参数可能不同。我们正在努力为所有端口添加文档字符串,这将使此类文档对每个端口都可用。
警告 - 一些函数/方法可能仅限内部使用,但目前在本文档中公开
本文档本部分直接从源代码生成。因此,有时会意外地显示不应调用的内部函数或方法。希望这种情况不常发生。
无需延迟……以下是所有元素和窗口类
按钮元素
Button Element - Defines all possible buttons. The shortcuts such as Submit, FileBrowse, ... each create a Button
Button(button_text="",
button_type=7,
target=(None, None),
tooltip=None,
file_types=(('ALL Files', '*.*'),),
initial_folder=None,
disabled=False,
change_submits=False,
enable_events=False,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
size=(None, None),
auto_size_button=None,
button_color=None,
disabled_button_color=None,
use_ttk_buttons=None,
font=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | (str) 按钮上要显示的文本 |
button_type | (int) 您不应直接设置此值。只有快捷函数会设置此值 |
target | Union[str, Tuple[int, int]] 键或 (行,列) 按钮的目标。注意,列的-1表示比当前位置左边的1个元素。常量 ThisRow 用于表示当前行。按钮自身是某些类型按钮的有效目标 |
tooltip | (str) 鼠标悬停时出现的文本 |
file_types | Tuple[Tuple[str, str], ...] 将用于匹配文件的文件类型。要表示所有文件:(("所有文件", "."),)。注意 - 在 MAC 上不支持 |
initial_folder | (str) 文件夹和文件的起始路径 |
disabled | (bool) 如果为 True,则按钮将被创建为禁用状态 |
click_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 打开元素特定事件。如果此按钮是目标,当填充时是否应生成事件 |
image_filename | (str) 如果有按钮图像,则图像文件名。仅支持 GIF 和 PNG。 |
image_data | Union[bytes, str] 放置在按钮上的图像的原始或 Base64 表示。选择文件名或数据之一 |
image_size | Tuple[int, int] 图像的像素大小(宽度,高度) |
image_subsample | (int) 减少图像大小的量。将大小除以这个数字。2=1/2,3=1/3,4=1/4,等等 |
border_width | (int) 按钮周围边框的像素宽度 |
size | Tuple[int, int] 按钮的字符宽度,行高(宽度,高度) |
auto_size_button | (bool) 如果为 True,则按钮大小将调整以适应文本 |
button_color | Tuple[str, str] 按钮的(文字颜色,背景颜色)。如果您在颜色之间说“ON”,则很容易记住哪一个是哪个。“红色”在“绿色”上。 |
disabled_button_color | Tuple[str, str] 按钮禁用时使用的颜色(文字,背景)。如果要更改颜色,请使用 None。只有 ttk 按钮支持文字和背景颜色。tk 按钮仅支持更改文字颜色 |
use_ttk_buttons | (bool) True = 使用 ttk 按钮。False = 不使用 ttk 按钮。None(默认)= 仅在 Mac 上使用 ttk 按钮,并且不与按钮图像一起使用 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
bind_return_key | (bool) 如果为 True,则回车键将触发此按钮 |
focus | (bool) 如果为 True,初始焦点将放在此按钮上 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
点击
生成按钮的点击事件,就像用户点击按钮一样。调用按钮的tkinter invoke方法
Click()
获取文本
返回按钮上显示的当前文本
GetText()
名称 | 含义 |
---|---|
return | (str)按钮上当前显示的文本 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改按钮元素的某些设置。必须在之前调用Window.Read
或Window.Finalize
Update(text=None,
button_color=(None, None),
disabled=None,
image_data=None,
image_filename=None,
visible=None,
image_subsample=None,
disabled_button_color=(None, None),
image_size=None)
参数说明
名称 | 含义 |
---|---|
text | (str)设置按钮文本 |
button_color | Tuple[str, str](文本颜色,背景颜色)按钮。如果你在颜色之间说“ON”,很容易记住哪个是哪个。“红色在绿色上” |
disabled | (bool)元素的禁用或启用状态 |
image_data | Union[bytes, str] 放置在按钮上的图像的原始或 Base64 表示。选择文件名或数据之一 |
image_filename | (str) 如果有按钮图像,则图像文件名。仅支持 GIF 和 PNG。 |
disabled_button_color | Tuple[str, str] 按钮禁用时使用的颜色(文字,背景)。如果要更改颜色,请使用 None。只有 ttk 按钮支持文字和背景颜色。tk 按钮仅支持更改文字颜色 |
可见 | (bool)控制元素的可见性 |
image_subsample | (int) 减少图像大小的量。将大小除以这个数字。2=1/2,3=1/3,4=1/4,等等 |
image_size | Tuple[int, int] 图像的像素大小(宽度,高度) |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
点击
生成按钮的点击事件,就像用户点击按钮一样。调用按钮的tkinter invoke方法
click()
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
get_text
返回按钮上显示的当前文本
get_text()
名称 | 含义 |
---|---|
return | (str)按钮上当前显示的文本 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改按钮元素的某些设置。必须在之前调用Window.Read
或Window.Finalize
update(text=None,
button_color=(None, None),
disabled=None,
image_data=None,
image_filename=None,
visible=None,
image_subsample=None,
disabled_button_color=(None, None),
image_size=None)
参数说明
名称 | 含义 |
---|---|
text | (str)设置按钮文本 |
button_color | Tuple[str, str](文本颜色,背景颜色)按钮。如果你在颜色之间说“ON”,很容易记住哪个是哪个。“红色在绿色上” |
disabled | (bool)元素的禁用或启用状态 |
image_data | Union[bytes, str] 放置在按钮上的图像的原始或 Base64 表示。选择文件名或数据之一 |
image_filename | (str) 如果有按钮图像,则图像文件名。仅支持 GIF 和 PNG。 |
disabled_button_color | Tuple[str, str] 按钮禁用时使用的颜色(文字,背景)。如果要更改颜色,请使用 None。只有 ttk 按钮支持文字和背景颜色。tk 按钮仅支持更改文字颜色 |
可见 | (bool)控制元素的可见性 |
image_subsample | (int) 减少图像大小的量。将大小除以这个数字。2=1/2,3=1/3,4=1/4,等等 |
image_size | Tuple[int, int] 图像的像素大小(宽度,高度) |
按钮菜单元素
The Button Menu Element. Creates a button that when clicked will show a menu similar to right click menu
ButtonMenu(button_text,
menu_def,
tooltip=None,
disabled=False,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
size=(None, None),
auto_size_button=None,
button_color=None,
font=None,
pad=None,
key=None,
tearoff=False,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | (str) 按钮上要显示的文本 |
menu_def | List[List[str]] - 当点击此元素时显示的菜单项列表。有关格式,请参阅文档,因为它们对所有菜单类型都相同 |
tooltip | (str) 鼠标悬停时出现的文本 |
disabled | (bool) 如果为 True,则按钮将被创建为禁用状态 |
image_filename | (str) 如果有按钮图像,则图像文件名。仅支持 GIF 和 PNG。 |
image_data | Union[bytes, str] 放置在按钮上的图像的原始或 Base64 表示。选择文件名或数据之一 |
image_size | Tuple[int, int] 图像的像素大小(宽度,高度) |
image_subsample | (int) 减少图像大小的量。将大小除以这个数字。2=1/2,3=1/3,4=1/4,等等 |
border_width | (int) 按钮周围边框的像素宽度 |
size | Tuple[int, int] 按钮的字符宽度,行高(宽度,高度) |
auto_size_button | (bool) 如果为 True,则按钮大小将调整以适应文本 |
button_color | Tuple[str, str](文本颜色,背景颜色)按钮。如果你在颜色之间说“ON”,很容易记住哪个是哪个。“红色在绿色上” |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
tearoff | (bool)确定菜单是否允许将它们撕掉 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
点击
生成按钮的点击事件,就像用户点击按钮一样。调用按钮的tkinter invoke方法
Click()
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改按钮菜单元素的某些设置。必须在之前调用Window.Read
或Window.Finalize
Update(menu_definition, visible=None)
参数说明
名称 | 含义 |
---|---|
menu_definition | (List[List])新的菜单定义(在菜单定义格式中) |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改按钮菜单元素的某些设置。必须在之前调用Window.Read
或Window.Finalize
update(menu_definition, visible=None)
参数说明
名称 | 含义 |
---|---|
menu_definition | (List[List])新的菜单定义(在菜单定义格式中) |
可见 | (bool)控制元素的可见性 |
画布元素
Canvas(canvas=None,
background_color=None,
size=(None, None),
pad=None,
key=None,
tooltip=None,
right_click_menu=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
canvas | (tk.Canvas)如果你已经创建了它,则是你自己的tk.Canvas。留空以创建Canvas |
background_color | (str) 背景颜色 |
size | Tuple[int,int] - 以像素为单位创建画布的宽度和高度 |
pad | 元素周围的填充量 |
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
TKCanvas
属性:TKCanvas
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
tk_canvas
属性:tk_canvas
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
复选框元素
Checkbox Element - Displays a checkbox and text next to it
Checkbox(text,
default=False,
size=(None, None),
auto_size_text=None,
font=None,
background_color=None,
text_color=None,
change_submits=False,
enable_events=False,
disabled=False,
key=None,
pad=None,
tooltip=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
text | (str) 显示在复选框旁边的文本 |
默认 | (bool) 如果您想将复选框初始设置为选中,请设置为True |
size | Tuple[int, int] (width, height) 宽度 = 字符数,高度 = 行数 |
auto_size_text | (bool) 如果为True,则将元素的大小设置为与文本长度相匹配 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
change_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 启用元素特定事件。复选框事件发生在项更改时 |
disabled | (bool) 设置禁用状态 |
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 鼠标悬停时出现的文本 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
返回此复选框的当前状态
Get()
名称 | 含义 |
---|---|
return | (bool) 复选框的当前状态 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改复选框元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前进行。注意,更改可见性可能在元素变为可见后导致元素位置变化
Update(value=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (bool) 如果为True则选中复选框,如果为False则清除 |
disabled | (bool) 禁用或启用元素 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get
返回此复选框的当前状态
get()
名称 | 含义 |
---|---|
return | (bool) 复选框的当前状态 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改复选框元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前进行。注意,更改可见性可能在元素变为可见后导致元素位置变化
update(value=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (bool) 如果为True则选中复选框,如果为False则清除 |
disabled | (bool) 禁用或启用元素 |
可见 | (bool)控制元素的可见性 |
列元素
A container element that is used to create a layout within your window's layout
Column(layout,
background_color=None,
size=(None, None),
pad=None,
scrollable=False,
vertical_scroll_only=False,
right_click_menu=None,
key=None,
visible=True,
justification="left",
element_justification="left",
metadata=None)
参数说明
名称 | 含义 |
---|---|
布局 | List[List[Element]] 将显示在列容器中的布局 |
background_color | (str) 整个列的背景颜色 |
size | Tuple[int, int] (width, height) 像素大小(在tkinter中可能不完全正确,有时只有一个维度被设置) |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
scrollable | (bool) 如果为True,则将在列中添加滚动条 |
vertical_scroll_only | (bool) 如果为True,则不会显示水平滚动条 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
可见 | (bool)设置元素的可见状态 |
justification | (str) 设置列本身的对齐方式。注意整个包含列的行都将受到影响 |
element_justification | (str) 列内的所有元素都将具有此对齐方式'left','right','center'是有效值 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改列元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前进行
Update(visible=None)
参数说明
名称 | 含义 |
---|---|
可见 | (bool)控制元素的可见性 |
add_row
不推荐用户调用。用于向列元素添加元素行。
add_row(args)
参数说明
名称 | 含义 |
---|---|
*args | List[Element] 此行的元素列表 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
布局
可以使用Window.Layout方法使用,但最好在创建时使用layout参数
layout(rows)
参数说明
名称 | 含义 |
---|---|
rows | List[List[Element]] 元素行 |
return | (Column) 用于链接 |
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改列元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前进行
update(visible=None)
参数说明
名称 | 含义 |
---|---|
可见 | (bool)控制元素的可见性 |
组合元素
ComboBox Element - A combination of a single-line input and a drop-down menu. User can type in their own value or choose from list.
Combo(values,
default_value=None,
size=(None, None),
auto_size_text=None,
background_color=None,
text_color=None,
change_submits=False,
enable_events=False,
disabled=False,
key=None,
pad=None,
tooltip=None,
readonly=False,
font=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
values | List[Any] 选择的值。虽然显示为文本,但返回的项目是调用者提供的,而不是文本 |
default_value | (Any) 作为初始值显示的选择。必须与values变量内容匹配 |
size | Tuple[int, int] (width, height) 宽度 = 字符数,高度 = 行数 |
auto_size_text | (bool) 如果元素应该与内容相同大小,则为True |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
change_submits | (bool) 已弃用。请勿使用。请使用enable_events 代替 |
enable_events | (bool) 启用元素特定事件。组合事件是在做出选择时 |
disabled | (bool) 为元素设置禁用状态 |
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 当鼠标悬停在此元素上时显示的文本 |
readonly | (bool) 使元素只读(用户不能更改)。True表示用户不能更改 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
返回组合的当前(现在是)值。请勿将此用作读取组合的正常方式!您应该使用window.Read调用中的值。如果您使用它,请了解您正在做什么。
Get()
名称 | 含义 |
---|---|
return | Union[Any, None] 返回当前所选值的值 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改组合元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前进行
Update(value=None,
values=None,
set_to_index=None,
disabled=None,
readonly=None,
font=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (Any) 根据新的选择列表更改当前选定值的值 |
values | List[Any] 更改选择列表 |
set_to_index | (int) 将选择更改为从索引 = 0 开始的特定选项 |
disabled | (bool)元素的禁用或启用状态 |
readonly | (bool) 如果为 True,则使元素为只读(用户无法更改任何选项) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get
返回组合的当前(现在是)值。请勿将此用作读取组合的正常方式!您应该使用window.Read调用中的值。如果您使用它,请了解您正在做什么。
get()
名称 | 含义 |
---|---|
return | Union[Any, None] 返回当前所选值的值 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改组合元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前进行
update(value=None,
values=None,
set_to_index=None,
disabled=None,
readonly=None,
font=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (Any) 根据新的选择列表更改当前选定值的值 |
values | List[Any] 更改选择列表 |
set_to_index | (int) 将选择更改为从索引 = 0 开始的特定选项 |
disabled | (bool)元素的禁用或启用状态 |
readonly | (bool) 如果为 True,则使元素为只读(用户无法更改任何选项) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
可见 | (bool)控制元素的可见性 |
框架元素
A Frame Element that contains other Elements. Encloses with a line around elements and a text label.
Frame(title,
layout,
title_color=None,
background_color=None,
title_location=None,
relief="groove",
size=(None, None),
font=None,
pad=None,
border_width=None,
key=None,
tooltip=None,
right_click_menu=None,
visible=True,
element_justification="left",
metadata=None)
参数说明
名称 | 含义 |
---|---|
title | (str) 显示为框架的“标签”或标题的文本 |
布局 | List[List[元素]] 框架内放置的布局 |
标题颜色 | (str) 标题文本的颜色 |
background_color | (str) 框架的背景颜色 |
标题位置 | (枚举) 放置文本标题的位置。选项包括:TITLE_LOCATION_TOP TITLE_LOCATION_BOTTOM TITLE_LOCATION_LEFT TITLE_LOCATION_RIGHT TITLE_LOCATION_TOP_LEFT TITLE_LOCATION_TOP_RIGHT TITLE_LOCATION_BOTTOM_LEFT TITLE_LOCATION_BOTTOM_RIGHT |
浮雕效果 | (枚举) 浮雕效果样式。值与具有浮雕效果的其他元素相同。选项包括 RELIEF_RAISED RELIEF_SUNKEN RELIEF_FLAT RELIEF_RIDGE RELIEF_GROOVE RELIEF_SOLID |
size | Tuple[int, int] (字符宽度,行高)(注意此参数可能不一定有效) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
border_width | (int) 元素周围的边框宽度(以像素为单位) |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
element_justification | (str) 框架内所有元素都将具有此对齐方式 'left','right','center' 是有效值 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改框架元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前执行
Update(value=None, visible=None)
参数说明
名称 | 含义 |
---|---|
value | (Any) 显示在框架上的新文本值 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改框架元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前执行
update(value=None, visible=None)
参数说明
名称 | 含义 |
---|---|
value | (Any) 显示在框架上的新文本值 |
可见 | (bool)控制元素的可见性 |
Graph元素
Creates an area for you to draw on. The MAGICAL property this Element has is that you interact
with the element using your own coordinate system. This is an important point!! YOU define where the location
is for (0,0). Want (0,0) to be in the middle of the graph like a math 4-quadrant graph? No problem! Set your
lower left corner to be (-100,-100) and your upper right to be (100,100) and you've got yourself a graph with
(0,0) at the center.
One of THE coolest of the Elements.
You can also use float values. To do so, be sure and set the float_values parameter.
Mouse click and drag events are possible and return the (x,y) coordinates of the mouse
Drawing primitives return an "id" that is referenced when you want to operation on that item (e.g. to erase it)
Graph(canvas_size,
graph_bottom_left,
graph_top_right,
background_color=None,
pad=None,
change_submits=False,
drag_submits=False,
enable_events=False,
key=None,
tooltip=None,
right_click_menu=None,
visible=True,
float_values=False,
metadata=None)
参数说明
名称 | 含义 |
---|---|
画布大小 | Tuple[int, int] (宽度,高度) 画布区域的大小(以像素为单位) |
图形左下角 | Tuple[int, int] (x,y) 坐标系的左下角 |
图形右上角 | Tuple[int, int] (x,y) 坐标系的右上角 |
background_color | (str) 绘图区域的背景颜色 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
change_submits | (bool) * 已废弃,请勿使用!与 enable_events 相同 |
拖动提交 | (bool) 如果为 True 且为 Graph 启用事件,则在鼠标按下时移动鼠标将报告事件 |
enable_events | (bool) 如果为 True,则 Graph 上的点击立即报告为事件。请使用此选项代替 change_submits |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool) 设置元素的可见状态(默认 = True) |
浮点值 | (bool) 如果为 True,则 x,y 坐标作为浮点数返回,而不是整数 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
BringFigureToFront
更改图形上图形的 Z 轴顺序。将指示的图形带到所有其他绘制的图形的前面
BringFigureToFront(figure)
参数说明
名称 | 含义 |
---|---|
图形 | (int) 当创建图形/绘图时 tkinter 返回的值 |
ButtonPressCallBack
不是一个用户可调用的方法。用于获取图形点击事件。当按钮释放时由 tkinter 调用
ButtonPressCallBack(event)
参数说明
名称 | 含义 |
---|---|
event | (event) 从 tkinter 获取的事件信息。包含点击的 x 和 y 坐标 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
DeleteFigure
从图形中删除由 id 表示的图形。该 id 在您调用绘图原语时提供
DeleteFigure(id)
参数说明
名称 | 含义 |
---|---|
id | (int) 当调用绘图方法时返回给您的 id |
DrawArc
绘制不同类型的圆弧。使用“边界框”定义位置
DrawArc(top_left,
bottom_right,
extent,
start_angle,
style=None,
arc_color="black",
line_width=1)
参数说明
名称 | 含义 |
---|---|
top_left | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的左上角 |
bottom_right | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的右下角 |
幅度 | (float) 绘制结束的角度。与 start_angle 一起使用 |
start_angle | (float) 绘制开始的角度。与 extent 一起使用 |
样式 | (str) 有效的选择是以下这些样式字符串之一- 'pieslice', 'chord', 'arc', 'first', 'last', 'butt', 'projecting', 'round', 'bevel', 'miter' |
arc_color | (str) 绘制圆弧的颜色 |
return | Union[int, None] 从 tkinter 返回的 id,如果您想操作圆弧则需要该 id |
DrawCircle
绘制一个圆,中心位于提供的位置。可以设置填充和轮廓颜色
DrawCircle(center_location,
radius,
fill_color=None,
line_color="black",
line_width=1)
参数说明
名称 | 含义 |
---|---|
center_location | Union [Tuple[int, int], Tuple[float, float]] 使用用户坐标系统指定的中心位置 |
radius | Union[int, float] 用户坐标值中的半径。 |
fill_color | (str) 绘制点的颜色 |
line_color | (字符串) 圆外围线条的颜色(抱歉,无法设置粗细) |
line_width | (整数) 圆外围线条(轮廓)的宽度,以像素为单位 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作圆则需要这个 id |
DrawImage
将图像放置到您的画布上。这是该元素的一个非常重要的方法,因为它提供了很多功能
DrawImage(filename=None,
data=None,
location=(None, None),
color="black",
font=None,
angle=0)
参数说明
名称 | 含义 |
---|---|
filename | (字符串) 如果图像在文件中,则提供图像的路径和文件名。(仅限 GIF 和 PNG!) |
data | Union[str, bytes] 如果图像是 Base64 格式或原始格式,则使用 data 而不是 filename |
location | Union[Tuple[int, int], Tuple[float, float]] 放置图像左上角的位置(x,y) |
color | (字符串)文字颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
angle | (浮点数) 绘制文本的角度 0 到 360。零代表水平文本 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作图像则需要这个 id |
DrawLine
使用用户的坐标从一点绘制到另一点。可以设置线条的颜色和宽度
DrawLine(point_from,
point_to,
color="black",
width=1)
参数说明
名称 | 含义 |
---|---|
point_from | Union[Tuple[int, int], Tuple[float, float]] 线条的起始点 |
point_to | Union[Tuple[int, int], Tuple[float, float]] 线条的结束点 |
color | (字符串) 线条的颜色 |
width | (整数) 线条的宽度(以像素为单位) |
return | Union[int, None] 由 tktiner 返回的 id 或者在用户关闭窗口时为 None。当您想操作线条时使用此 id 绘制椭圆 |
DrawOval
基于用户坐标系统中的坐标绘制椭圆。提供“边界矩形”的位置
DrawOval(top_left,
bottom_right,
fill_color=None,
line_color=None,
line_width=1)
参数说明
名称 | 含义 |
---|---|
top_left | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的左上角 |
bottom_right | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的右下角 |
fill_color | (字符串) 内部颜色 |
line_color | (字符串) 椭圆轮廓的颜色 |
line_width | (整数) 椭圆外围线条的宽度,以像素为单位 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作椭圆则需要这个 id |
DrawPoint
在用户指定的点上绘制“点”
DrawPoint(point,
size=2,
color="black")
参数说明
名称 | 含义 |
---|---|
point | Union [Tuple[int, int], Tuple[float, float]] 使用用户坐标系统指定的中心位置 |
size | Union[int, float] 半径?(或直径?)以用户坐标值表示。 |
color | (str) 绘制点的颜色 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作点则需要这个 id |
DrawRectangle
根据两点绘制矩形。可以控制线条和填充颜色
DrawRectangle(top_left,
bottom_right,
fill_color=None,
line_color=None,
line_width=None)
参数说明
名称 | 含义 |
---|---|
top_left | Union[Tuple[int, int], Tuple[float, float]] 矩形的左上点 |
bottom_right | Union[Tuple[int, int], Tuple[float, float]] 矩形的右下点 |
fill_color | (字符串) 内部颜色 |
line_color | (字符串) 轮廓颜色 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作矩形则需要这个 id |
DrawText
在您的图表上绘制一些文本。例如,这是如何标记图表数轴的方式
DrawText(text,
location,
color="black",
font=None,
angle=0,
text_location="center")
参数说明
名称 | 含义 |
---|---|
text | (字符串) 要显示的文本 |
location | Union[Tuple[int, int], Tuple[float, float]] 放置第一个字母的位置 |
color | (字符串)文字颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
angle | (浮点数) 绘制文本的角度 0 到 360。零代表水平文本 |
text_location | (枚举) 文本的“锚点”位置。值从 TEXT_LOCATION_ 开始 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作文本则需要这个 id |
Erase
擦除图表 - 移除使用 Graph 方法(例如 DrawText)先前“绘制”的所有图形
Erase()
GetBoundingBox
给定一个图形,返回上左和下右边界框坐标
GetBoundingBox(figure)
参数说明
名称 | 含义 |
---|---|
图形 | 之前绘制的图形 |
return | Union[Tuple[int, int, int, int], Tuple[float, float, float, float]] (上左 x, 上左 y, 下右 x, 下右 y) |
GetFiguresAtLocation
返回位于 Graph 中特定 x,y 位置的图形列表
GetFiguresAtLocation(location)
参数说明
名称 | 含义 |
---|---|
location | Union[Tuple[int, int], Tuple[float, float]] 要检查的点 |
return | List[int] 之前绘制的“图形”列表(来自绘图原语返回) |
Move
将整个绘图区域(画布)移动一些 delta 到当前位置。单位是您坐标系统中的指示的数量
Move(x_direction, y_direction)
参数说明
名称 | 含义 |
---|---|
x_direction | Union[int, float] 在您的坐标中要移动多远 |
y_direction | Union[int, float] Y方向上移动的距离,使用您的坐标 |
MoveFigure
使用“delta”从当前位置移动之前绘制的图形
MoveFigure(figure,
x_direction,
y_direction)
参数说明
名称 | 含义 |
---|---|
图形 | (id) 之前获得的图形-id。这些是从所有Draw方法返回的 |
x_direction | Union[int, float] 应用于X方向位置的delta |
y_direction | Union[int, float] 应用于Y方向位置的delta |
RelocateFigure
将之前制作的图形移动到任意的(x,y)位置。这与Move方法不同,因为它使用绝对坐标而不是相对坐标
RelocateFigure(figure,
x,
y)
参数说明
名称 | 含义 |
---|---|
图形 | (id) 之前获得的图形-id。这些是从所有Draw方法返回的 |
x | Union[int, float] X轴上的位置(在用户坐标中),用于移动图形的左上角 |
y | Union[int, float] Y轴上的位置(在用户坐标中),用于移动图形的左上角 |
SendFigureToBack
更改图形在图上的Z顺序。将指定的图形发送到所有其他绘制图形的后面
SendFigureToBack(figure)
参数说明
名称 | 含义 |
---|---|
图形 | (int) 当创建图形/绘图时 tkinter 返回的值 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
TKCanvas
属性:TKCanvas
更新
更改图形元素的一些设置。必须在之前调用Window.Read
或Window.Finalize
Update(background_color=None, visible=None)
参数说明
名称 | 含义 |
---|---|
background_color | 背景颜色 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
bring_figure_to_front
更改图形上图形的 Z 轴顺序。将指示的图形带到所有其他绘制的图形的前面
bring_figure_to_front(figure)
参数说明
名称 | 含义 |
---|---|
图形 | (int) 当创建图形/绘图时 tkinter 返回的值 |
button_press_call_back
不是一个用户可调用的方法。用于获取图形点击事件。当按钮释放时由 tkinter 调用
button_press_call_back(event)
参数说明
名称 | 含义 |
---|---|
event | (event) 从 tkinter 获取的事件信息。包含点击的 x 和 y 坐标 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
change_coordinates
更改坐标系统到新的一个。使用空间中的相同两个点来定义坐标系统 - 图表的底部左值和顶部右值。
change_coordinates(graph_bottom_left, graph_top_right)
参数说明
名称 | 含义 |
---|---|
图形左下角 | Tuple[int, int] (x,y) 坐标系的左下角 |
图形右上角 | Tuple[int, int] (x,y) 坐标系的右上角 |
delete_figure
从图形中删除由 id 表示的图形。该 id 在您调用绘图原语时提供
delete_figure(id)
参数说明
名称 | 含义 |
---|---|
id | (int) 当调用绘图方法时返回给您的 id |
draw_arc
绘制不同类型的圆弧。使用“边界框”定义位置
draw_arc(top_left,
bottom_right,
extent,
start_angle,
style=None,
arc_color="black",
line_width=1)
参数说明
名称 | 含义 |
---|---|
top_left | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的左上角 |
bottom_right | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的右下角 |
幅度 | (float) 绘制结束的角度。与 start_angle 一起使用 |
start_angle | (float) 绘制开始的角度。与 extent 一起使用 |
样式 | (str) 有效的选择是以下这些样式字符串之一- 'pieslice', 'chord', 'arc', 'first', 'last', 'butt', 'projecting', 'round', 'bevel', 'miter' |
arc_color | (str) 绘制圆弧的颜色 |
return | Union[int, None] 从 tkinter 返回的 id,如果您想操作圆弧则需要该 id |
draw_circle
绘制一个圆,中心位于提供的位置。可以设置填充和轮廓颜色
draw_circle(center_location,
radius,
fill_color=None,
line_color="black",
line_width=1)
参数说明
名称 | 含义 |
---|---|
center_location | Union [Tuple[int, int], Tuple[float, float]] 使用用户坐标系统指定的中心位置 |
radius | Union[int, float] 用户坐标值中的半径。 |
fill_color | (str) 绘制点的颜色 |
line_color | (字符串) 圆外围线条的颜色(抱歉,无法设置粗细) |
line_width | (整数) 圆外围线条(轮廓)的宽度,以像素为单位 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作圆则需要这个 id |
draw_image
将图像放置到您的画布上。这是该元素的一个非常重要的方法,因为它提供了很多功能
draw_image(filename=None,
data=None,
location=(None, None),
color="black",
font=None,
angle=0)
参数说明
名称 | 含义 |
---|---|
filename | (字符串) 如果图像在文件中,则提供图像的路径和文件名。(仅限 GIF 和 PNG!) |
data | Union[str, bytes] 如果图像是 Base64 格式或原始格式,则使用 data 而不是 filename |
location | Union[Tuple[int, int], Tuple[float, float]] 放置图像左上角的位置(x,y) |
color | (字符串)文字颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
angle | (浮点数) 绘制文本的角度 0 到 360。零代表水平文本 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作图像则需要这个 id |
draw_line
使用用户的坐标从一点绘制到另一点。可以设置线条的颜色和宽度
draw_line(point_from,
point_to,
color="black",
width=1)
参数说明
名称 | 含义 |
---|---|
point_from | Union[Tuple[int, int], Tuple[float, float]] 线条的起始点 |
point_to | Union[Tuple[int, int], Tuple[float, float]] 线条的结束点 |
color | (字符串) 线条的颜色 |
width | (整数) 线条的宽度(以像素为单位) |
return | Union[int, None] 由 tktiner 返回的 id 或者在用户关闭窗口时为 None。当您想操作线条时使用此 id 绘制椭圆 |
draw_oval
基于用户坐标系统中的坐标绘制椭圆。提供“边界矩形”的位置
draw_oval(top_left,
bottom_right,
fill_color=None,
line_color=None,
line_width=1)
参数说明
名称 | 含义 |
---|---|
top_left | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的左上角 |
bottom_right | Union[Tuple[int, int], Tuple[float, float]] 边界矩形的右下角 |
fill_color | (字符串) 内部颜色 |
line_color | (字符串) 椭圆轮廓的颜色 |
line_width | (整数) 椭圆外围线条的宽度,以像素为单位 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作椭圆则需要这个 id |
draw_point
在用户指定的点上绘制“点”
draw_point(point,
size=2,
color="black")
参数说明
名称 | 含义 |
---|---|
point | Union [Tuple[int, int], Tuple[float, float]] 使用用户坐标系统指定的中心位置 |
size | Union[int, float] 半径?(或直径?)以用户坐标值表示。 |
color | (str) 绘制点的颜色 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作点则需要这个 id |
draw_rectangle
根据两点绘制矩形。可以控制线条和填充颜色
draw_rectangle(top_left,
bottom_right,
fill_color=None,
line_color=None,
line_width=None)
参数说明
名称 | 含义 |
---|---|
top_left | Union[Tuple[int, int], Tuple[float, float]] 矩形的左上点 |
bottom_right | Union[Tuple[int, int], Tuple[float, float]] 矩形的右下点 |
fill_color | (字符串) 内部颜色 |
line_color | (字符串) 轮廓颜色 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作矩形则需要这个 id |
draw_text
在您的图表上绘制一些文本。例如,这是如何标记图表数轴的方式
draw_text(text,
location,
color="black",
font=None,
angle=0,
text_location="center")
参数说明
名称 | 含义 |
---|---|
text | (字符串) 要显示的文本 |
location | Union[Tuple[int, int], Tuple[float, float]] 放置第一个字母的位置 |
color | (字符串)文字颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
angle | (浮点数) 绘制文本的角度 0 到 360。零代表水平文本 |
text_location | (枚举) 文本的“锚点”位置。值从 TEXT_LOCATION_ 开始 |
return | Union[int, None] 由 tkinter 返回的 id,如果您想操作文本则需要这个 id |
erase
擦除图表 - 移除使用 Graph 方法(例如 DrawText)先前“绘制”的所有图形
erase()
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_bounding_box
给定一个图形,返回上左和下右边界框坐标
get_bounding_box(figure)
参数说明
名称 | 含义 |
---|---|
图形 | 之前绘制的图形 |
return | Union[Tuple[int, int, int, int], Tuple[float, float, float, float]] (上左 x, 上左 y, 下右 x, 下右 y) |
get_figures_at_location
返回位于 Graph 中特定 x,y 位置的图形列表
get_figures_at_location(location)
参数说明
名称 | 含义 |
---|---|
location | Union[Tuple[int, int], Tuple[float, float]] 要检查的点 |
return | List[int] 之前绘制的“图形”列表(来自绘图原语返回) |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
move
将整个绘图区域(画布)移动一些 delta 到当前位置。单位是您坐标系统中的指示的数量
move(x_direction, y_direction)
参数说明
名称 | 含义 |
---|---|
x_direction | Union[int, float] 在您的坐标中要移动多远 |
y_direction | Union[int, float] Y方向上移动的距离,使用您的坐标 |
move_figure
使用“delta”从当前位置移动之前绘制的图形
move_figure(figure,
x_direction,
y_direction)
参数说明
名称 | 含义 |
---|---|
图形 | (id) 之前获得的图形-id。这些是从所有Draw方法返回的 |
x_direction | Union[int, float] 应用于X方向位置的delta |
y_direction | Union[int, float] 应用于Y方向位置的delta |
relocate_figure
将之前制作的图形移动到任意的(x,y)位置。这与Move方法不同,因为它使用绝对坐标而不是相对坐标
relocate_figure(figure,
x,
y)
参数说明
名称 | 含义 |
---|---|
图形 | (id) 之前获得的图形-id。这些是从所有Draw方法返回的 |
x | Union[int, float] X轴上的位置(在用户坐标中),用于移动图形的左上角 |
y | Union[int, float] Y轴上的位置(在用户坐标中),用于移动图形的左上角 |
send_figure_to_back
更改图形在图上的Z顺序。将指定的图形发送到所有其他绘制图形的后面
send_figure_to_back(figure)
参数说明
名称 | 含义 |
---|---|
图形 | (int) 当创建图形/绘图时 tkinter 返回的值 |
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
tk_canvas
属性:tk_canvas
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改图形元素的一些设置。必须在之前调用Window.Read
或Window.Finalize
update(background_color=None, visible=None)
参数说明
名称 | 含义 |
---|---|
background_color | 背景颜色 |
可见 | (bool)控制元素的可见性 |
图像元素
Image Element - show an image in the window. Should be a GIF or a PNG only
Image(filename=None,
data=None,
background_color=None,
size=(None, None),
pad=None,
key=None,
tooltip=None,
right_click_menu=None,
visible=True,
enable_events=False,
metadata=None)
参数说明
名称 | 含义 |
---|---|
filename | (str) 如果有按钮图像,则图像文件名。仅支持 GIF 和 PNG。 |
data | Union[bytes, str] 放置在按钮上的图像的原始或 Base64 表示。选择文件名或数据之一 |
background_color | 背景颜色 |
size | Tuple[int, int] (width, height) 图像在像素中的大小 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
enable_events | (bool) 打开元素特定的事件。对于图像元素,事件是“image clicked” |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改图像元素的一些设置。必须在之前调用Window.Read
或Window.Finalize
Update(filename=None,
data=None,
size=(None, None),
visible=None)
参数说明
名称 | 含义 |
---|---|
filename | (str) 要显示的新图像的文件名。 |
data | Union[str, tkPhotoImage] Base64编码的字符串 OR tk.PhotoImage对象 |
size | Tuple[int,int] 图像的大小(w,h)w=字符宽,h=行高 |
可见 | (bool)控制元素的可见性 |
UpdateAnimation
显示动画GIF。根据需要调用此函数。函数将确定何时显示下一帧,并将在正确的时间自动前进到下一帧。注意 - 不执行sleep调用以延迟
UpdateAnimation(source, time_between_frames=0)
参数说明
名称 | 含义 |
---|---|
source | Union[str,bytes] 包含动画GIF的文件名或Base64编码的字符串 |
time_between_frames | (int) 在显示帧之间等待的毫秒数 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改图像元素的一些设置。必须在之前调用Window.Read
或Window.Finalize
update(filename=None,
data=None,
size=(None, None),
visible=None)
参数说明
名称 | 含义 |
---|---|
filename | (str) 要显示的新图像的文件名。 |
data | Union[str, tkPhotoImage] Base64编码的字符串 OR tk.PhotoImage对象 |
size | Tuple[int,int] 图像的大小(w,h)w=字符宽,h=行高 |
可见 | (bool)控制元素的可见性 |
update_animation
显示动画GIF。根据需要调用此函数。函数将确定何时显示下一帧,并将在正确的时间自动前进到下一帧。注意 - 不执行sleep调用以延迟
update_animation(source, time_between_frames=0)
参数说明
名称 | 含义 |
---|---|
source | Union[str,bytes] 包含动画GIF的文件名或Base64编码的字符串 |
time_between_frames | (int) 在显示帧之间等待的毫秒数 |
InputText Element
Display a single text input field. Based on the tkinter Widget `Entry`
InputText(default_text="",
size=(None, None),
disabled=False,
password_char="",
justification=None,
background_color=None,
text_color=None,
font=None,
tooltip=None,
change_submits=False,
enable_events=False,
do_not_clear=True,
key=None,
focus=False,
pad=None,
use_readonly_for_disable=True,
right_click_menu=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
default_text | (str) 输入框中显示的默认文本(默认值 = '') |
size | Tuple[int, int] (width, height) w=字符宽,h=行高 |
disabled | (bool) 设置元素的禁用状态(默认 = False) |
password_char | (char) 如果这是一个密码字段,则密码字符(默认值 = '') |
justification | (str) 数据显示的对齐方式。有效选项 - left, right, center |
background_color | (str) 背景颜色的颜色格式之一 |
text_color | (str) 文本颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
tooltip | (str) 鼠标悬停时出现的文本 |
change_submits | (bool) * 已废弃,请勿使用!与 enable_events 相同 |
enable_events | (bool) 如果为True,则更改此元素会立即报告为事件。用此代替change_submits(默认 = False) |
do_not_clear | (bool) 如果为False,则在任何事件(按钮、任何事件)后字段将被设置为空白(默认 = True) |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
focus | (bool) 确定初始焦点是否应移动到该元素。 |
pad | (int, int) 或 ((int, int), (int, int)) Tuple(s)。围绕元素放置的填充量。通常是(水平像素,垂直像素),但可以进一步分开为((水平左,水平右),(垂直上,垂直下)) |
use_readonly_for_disable | (bool) 如果为True(默认值),则tkinter状态设置为'readonly'。否则状态设置为'disabled'。 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool) 设置元素的可见状态(默认 = True) |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
读取并返回输入元素的当前值。必须在之前调用Window.Read
或Window.Finalize
Get()
名称 | 含义 |
---|---|
return | (str) 输入字段的当前值或如果遇到错误为'' |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改输入元素的一些设置。必须在之前调用Window.Read
或Window.Finalize
Update(value=None,
disabled=None,
select=None,
visible=None,
text_color=None,
background_color=None,
move_cursor_to="end")
参数说明
名称 | 含义 |
---|---|
value | (str) 在输入字段中显示的新默认文本 |
disabled | (bool) 元素的禁用或启用状态(将输入小部件设置为只读或正常) |
选择 | (bool) 如果为True,则文本将被选中 |
可见 | (bool) 改变元素的可视性 |
text_color | (str) 改变正在输入的文本颜色 |
background_color | (str) 改变背景颜色 |
移动光标到 | Union[int, str] 将光标移动到特定的偏移量。默认为'end' |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get
读取并返回输入元素的当前值。必须在之前调用Window.Read
或Window.Finalize
get()
名称 | 含义 |
---|---|
return | (str) 输入字段的当前值或如果遇到错误为'' |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改输入元素的一些设置。必须在之前调用Window.Read
或Window.Finalize
update(value=None,
disabled=None,
select=None,
visible=None,
text_color=None,
background_color=None,
move_cursor_to="end")
参数说明
名称 | 含义 |
---|---|
value | (str) 在输入字段中显示的新默认文本 |
disabled | (bool) 元素的禁用或启用状态(将输入小部件设置为只读或正常) |
选择 | (bool) 如果为True,则文本将被选中 |
可见 | (bool) 改变元素的可视性 |
text_color | (str) 改变正在输入的文本颜色 |
background_color | (str) 改变背景颜色 |
移动光标到 | Union[int, str] 将光标移动到特定的偏移量。默认为'end' |
列表框元素
A List Box. Provide a list of values for the user to choose one or more of. Returns a list of selected rows
when a window.Read() is executed.
Listbox(values,
default_values=None,
select_mode=None,
change_submits=False,
enable_events=False,
bind_return_key=False,
size=(None, None),
disabled=False,
auto_size_text=None,
font=None,
no_scrollbar=False,
background_color=None,
text_color=None,
key=None,
pad=None,
tooltip=None,
right_click_menu=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
values | List[Any] 要显示的值列表。可以是任何类型,包括混合类型,只要它们有 str 方法 |
默认值 | List[Any] 应该最初选择的值 |
选择模式 | [enum] 选择模式用于确定是否只能选择一个项目或多个,以及如何选择。有效选项以 "LISTBOX_SELECT_MODE_" 开头,包括:LISTBOX_SELECT_MODE_SINGLE LISTBOX_SELECT_MODE_MULTIPLE LISTBOX_SELECT_MODE_BROWSE LISTBOX_SELECT_MODE_EXTENDED |
change_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 启用元素特定事件。列表框在点击项目时生成事件 |
bind_return_key | (bool) 如果为True,则回车键将导致列表框生成事件 |
size | Tuple(int, int) (width, height) width = 字符宽度,height = 行高 |
disabled | (bool) 为元素设置禁用状态 |
auto_size_text | (bool) 如果元素应该与内容相同大小,则为True |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取索引
返回当前选中的项作为索引列表
获取索引()
名称 | 含义 |
---|---|
return | List[int] 当前选中值的偏移量列表 |
获取列表值
返回用户提供的值的列表,格式由用户定义
获取列表值()
名称 | 含义 |
---|---|
return | List[Any]. 值列表。可以是任何 / 混合类型 -> [] |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
设置值
设置列表框高亮选项
SetValue(values)
参数说明
名称 | 含义 |
---|---|
values | List[Any] 基于先前设置的值选择的新值 |
更新
更改列表框元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
Update(values=None,
disabled=None,
set_to_index=None,
scroll_to_index=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
values | List[Any] 要显示给用户的新选项列表 |
disabled | (bool)元素的禁用或启用状态 |
set_to_index | Union[int, list, tuple] 高亮显示指示的项目(如果参数是整数,则设置一个条目。如果是列表,则高亮显示列表中的每个条目) |
滚动到索引 | (int) 将列表框滚动到使此索引为第一个显示的位置 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
获取索引
返回当前选中的项作为索引列表
获取索引()
名称 | 含义 |
---|---|
return | List[int] 当前选中值的偏移量列表 |
获取列表值
返回用户提供的值的列表,格式由用户定义
获取列表值()
名称 | 含义 |
---|---|
return | List[Any]. 值列表。可以是任何 / 混合类型 -> [] |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
设置值
设置列表框高亮选项
set_value(values)
参数说明
名称 | 含义 |
---|---|
values | List[Any] 基于先前设置的值选择的新值 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改列表框元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
update(values=None,
disabled=None,
set_to_index=None,
scroll_to_index=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
values | List[Any] 要显示给用户的新选项列表 |
disabled | (bool)元素的禁用或启用状态 |
set_to_index | Union[int, list, tuple] 高亮显示指示的项目(如果参数是整数,则设置一个条目。如果是列表,则高亮显示列表中的每个条目) |
滚动到索引 | (int) 将列表框滚动到使此索引为第一个显示的位置 |
可见 | (bool)控制元素的可见性 |
菜单元素
Menu Element is the Element that provides a Menu Bar that goes across the top of the window, just below titlebar.
Here is an example layout. The "&" are shortcut keys ALT+key.
Is a List of - "Item String" + List
Where Item String is what will be displayed on the Menubar itself.
The List that follows the item represents the items that are shown then Menu item is clicked
Notice how an "entry" in a mennu can be a list which means it branches out and shows another menu, etc. (resursive)
menu_def = [['&File', ['!&Open', '&Save::savekey', '---', '&Properties', 'E&xit']],
['!&Edit', ['!&Paste', ['Special', 'Normal', ], 'Undo'], ],
['&Debugger', ['Popout', 'Launch Debugger']],
['&Toolbar', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],
['&Help', '&About...'], ]
Finally, "keys" can be added to entries so make them unique. The "Save" entry has a key associated with it. You
can see it has a "::" which signifies the beginning of a key. The user will not see the key portion when the
menu is shown. The key portion is returned as part of the event.
Menu(menu_definition,
background_color=None,
size=(None, None),
tearoff=False,
pad=None,
key=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
menu_definition | List[List[Tuple[str, List[str]]] |
background_color | (str) 背景颜色 |
size | Tuple[int, int] 在 tkinter 端未使用 |
tearoff | (bool) 如果为True,则可以将菜单从窗口撕裂出来并用作浮动窗口。非常酷的效果 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更新菜单栏 - 可以更改菜单定义和可见性。必须指定整个菜单
Update(menu_definition=None, visible=None)
参数说明
名称 | 含义 |
---|---|
menu_definition | List[List[Tuple[str, List[str]]] |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更新菜单栏 - 可以更改菜单定义和可见性。必须指定整个菜单
update(menu_definition=None, visible=None)
参数说明
名称 | 含义 |
---|---|
menu_definition | List[List[Tuple[str, List[str]]] |
可见 | (bool)控制元素的可见性 |
多行元素
Multiline Element - Display and/or read multiple lines of text. This is both an input and output element.
Other PySimpleGUI ports have a separate MultilineInput and MultilineOutput elements. May want to split this
one up in the future too.
Multiline(default_text="",
enter_submits=False,
disabled=False,
autoscroll=False,
border_width=None,
size=(None, None),
auto_size_text=None,
background_color=None,
text_color=None,
change_submits=False,
enable_events=False,
do_not_clear=True,
key=None,
focus=False,
font=None,
pad=None,
tooltip=None,
right_click_menu=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
default_text | (str) 初始显示的文本 |
enter_submits | (bool) 如果为True,则窗口的 Read 调用将返回是否在此元素中按下 enter 键 |
disabled | (bool) 设置禁用状态 |
autoscroll | (bool) 如果为True,则当向元素末尾添加更多数据时,元素的 内容将自动滚动 |
border_width | (int) 元素周围的边框宽度(以像素为单位) |
size | Tuple[int, int] (width, height) 宽度 = 字符数,高度 = 行数 |
auto_size_text | (bool) 如果为True,则将元素的大小设置为与文本长度相匹配 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
change_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 启用元素特定事件。当项目更改时发生 Spin 事件 |
do_not_clear | 如果为False,则元素将在 Window.Read 调用返回时清除 |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
focus | (bool) 如果为True,则初始焦点将转到此元素 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
返回多行元素的当前内容
Get()
名称 | 含义 |
---|---|
return | (str) 多行元素的当前内容(用作多行的输入类型) |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改多行元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
Update(value=None,
disabled=None,
append=False,
font=None,
text_color=None,
background_color=None,
text_color_for_value=None,
background_color_for_value=None,
visible=None,
autoscroll=None)
参数说明
名称 | 含义 |
---|---|
value | (str) 要显示的新文本 |
disabled | (bool)元素的禁用或启用状态 |
追加 | (bool) 如果为True,则新值将添加到当前值的末尾。如果为False,则内容将被替换。 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
text_color | (str) 文本颜色 |
background_color | (str) 背景颜色 |
可见 | (bool)设置元素的可见状态 |
autoscroll | (bool) 如果为True,则在将新文本添加到末尾时,元素的内容将向下滚动 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get
返回多行元素的当前内容
get()
名称 | 含义 |
---|---|
return | (str) 多行元素的当前内容(用作多行的输入类型) |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改多行元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
update(value=None,
disabled=None,
append=False,
font=None,
text_color=None,
background_color=None,
text_color_for_value=None,
background_color_for_value=None,
visible=None,
autoscroll=None)
参数说明
名称 | 含义 |
---|---|
value | (str) 要显示的新文本 |
disabled | (bool)元素的禁用或启用状态 |
追加 | (bool) 如果为True,则新值将添加到当前值的末尾。如果为False,则内容将被替换。 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
text_color | (str) 文本颜色 |
background_color | (str) 背景颜色 |
可见 | (bool)设置元素的可见状态 |
autoscroll | (bool) 如果为True,则在将新文本添加到末尾时,元素的内容将向下滚动 |
OptionMenu 元素
Option Menu is an Element available ONLY on the tkinter port of PySimpleGUI. It's is a widget that is unique
to tkinter. However, it looks much like a ComboBox. Instead of an arrow to click to pull down the list of
choices, another little graphic is shown on the widget to indicate where you click. After clicking to activate,
it looks like a Combo Box that you scroll to select a choice.
OptionMenu(values,
default_value=None,
size=(None, None),
disabled=False,
auto_size_text=None,
background_color=None,
text_color=None,
key=None,
pad=None,
tooltip=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
values | 要显示的值 |
default_value | (Any) 默认选择的值 |
size | 元组[int, int] (width, height) 字符宽度和行高 |
disabled | (bool) 控制启用/禁用 |
auto_size_text | (bool) 如果元素的大小应与项的内容相匹配则为 True |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 当鼠标悬停在此元素上时显示的文本 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改 OptionMenu 元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
Update(value=None,
values=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (Any) 默认选择的值 |
values | 要显示的值 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改 OptionMenu 元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
update(value=None,
values=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (Any) 默认选择的值 |
values | 要显示的值 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
输出元素
Output Element - a multi-lined text area where stdout and stderr are re-routed to.
Output(size=(None, None),
background_color=None,
text_color=None,
pad=None,
font=None,
tooltip=None,
key=None,
right_click_menu=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
tooltip | (str) 鼠标悬停时出现的文本 |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
返回当前输出内容。类似于其他元素的 Get 方法
Get()
名称 | 含义 |
---|---|
return | (str) 输出的当前值 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
TKOut
属性:TKOut
更新
更改 Output 元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
Update(value=None, visible=None)
参数说明
名称 | 含义 |
---|---|
value | (str) 将替换输出区域当前内容的字符串 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False, expand_y=False)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
tk_out
属性:tk_out
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改 Output 元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
update(value=None, visible=None)
参数说明
名称 | 含义 |
---|---|
value | (str) 将替换输出区域当前内容的字符串 |
可见 | (bool)控制元素的可见性 |
面板元素
A sliding Pane that is unique to tkinter. Uses Columns to create individual panes
Pane(pane_list,
background_color=None,
size=(None, None),
pad=None,
orientation="vertical",
show_handle=True,
relief="raised",
handle_size=None,
border_width=None,
key=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
pane_list | 列表[列] 必须是列元素的列表。每个提供的列成为一个显示的面板 |
background_color | (str) 背景颜色 |
size | 元组[int, int] (w,h) w=字符宽,h=行高。为面板预留多少空间 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
方向 | (str) 'horizontal' 或 'vertical' 或 ('h' 或 'v')。面板应该滑动方向 |
显示把手 | (bool) 如果为 True,则绘制把手,使其更容易抓取和滑动 |
浮雕效果 | (枚举) 凹凸样式。值与使用凹凸值的其他元素相同。RELIEF_RAISED RELIEF_SUNKEN RELIEF_FLAT RELIEF_RIDGE RELIEF_GROOVE RELIEF_SOLID |
把手大小 | (int) 把手像素大小 |
border_width | (int) 元素周围的边框宽度(以像素为单位) |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改面板元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
Update(visible=None)
参数说明
名称 | 含义 |
---|---|
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改面板元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
update(visible=None)
参数说明
名称 | 含义 |
---|---|
可见 | (bool)控制元素的可见性 |
进度条元素
Progress Bar Element - Displays a colored bar that is shaded as progress of some operation is made
ProgressBar(max_value,
orientation=None,
size=(None, None),
auto_size_text=None,
bar_color=(None, None),
style=None,
border_width=None,
relief=None,
key=None,
pad=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
最大值 | (int) 进度条的最大值 |
方向 | (str) 'horizontal' 或 'vertical' |
size | 元组[int, int] 条的尺寸。如果水平(字符宽,像素高),垂直(像素宽,行高) |
auto_size_text | (bool) 不确定为什么这里有这个 |
条形色 | 元组[str, str] 组成进度条的两种颜色。一种是背景,另一种是条 |
样式 | (str) 进度条样式定义为以下之一 'default', 'winnative', 'clam', 'alt', 'classic', 'vista', 'xpnative' |
border_width | (int) 条周围的外部像素数 |
浮雕效果 | (str) 凹凸样式。值与进度表凹凸值相同。可以是常量或字符串:RELIEF_RAISED RELIEF_SUNKEN RELIEF_FLAT RELIEF_RIDGE RELIEF_GROOVE RELIEF_SOLID (默认值 = DEFAULT_PROGRESS_BAR_RELIEF) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改进度条元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
Update(visible=None)
参数说明
名称 | 含义 |
---|---|
可见 | (bool)控制元素的可见性 |
UpdateBar
通过更改当前计数和可选的最大计数来更改条显示的内容
UpdateBar(current_count, max=None)
参数说明
名称 | 含义 |
---|---|
当前计数 | (int) 设置当前值 |
最大 | (int) 更改最大值 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改进度条元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
update(visible=None)
参数说明
名称 | 含义 |
---|---|
可见 | (bool)控制元素的可见性 |
更新条
通过更改当前计数和可选的最大计数来更改条显示的内容
update_bar(current_count, max=None)
参数说明
名称 | 含义 |
---|---|
当前计数 | (int) 设置当前值 |
最大 | (int) 更改最大值 |
单选按钮元素
Radio Button Element - Used in a group of other Radio Elements to provide user with ability to select only
1 choice in a list of choices.
Radio(text,
group_id,
default=False,
disabled=False,
size=(None, None),
auto_size_text=None,
background_color=None,
text_color=None,
font=None,
key=None,
pad=None,
tooltip=None,
change_submits=False,
enable_events=False,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
text | (str) 在按钮旁边显示的文本 |
group_id | (Any) 将多个单选按钮分组在一起。任何类型都适用 |
默认 | (bool) 将要初始选择的组中的一个元素的设置为 True |
disabled | (bool) 设置禁用状态 |
size | Tuple[int, int] (width, height) 宽度 = 字符数,高度 = 行数 |
auto_size_text | (bool) 如果为True,则将元素的大小设置为与文本长度相匹配 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 鼠标悬停时出现的文本 |
change_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 打开元素特定的事件。单选按钮事件发生在选择项时 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
单选按钮值的快照 -> (bool)
Get()
名称 | 含义 |
---|---|
return | (bool) 如果此单选按钮被选中则为 True |
重置组
将组中的所有单选按钮设置为未选中
ResetGroup()
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改单选按钮元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
Update(value=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (bool) 如果为 True,则更改为选中状态,并将组中的其他设置为未选中 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get
单选按钮值的快照 -> (bool)
get()
名称 | 含义 |
---|---|
return | (bool) 如果此单选按钮被选中则为 True |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
重置组
将组中的所有单选按钮设置为未选中
reset_group()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改单选按钮元素的某些设置。必须先调用 Window.Read
或 Window.Finalize
update(value=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (bool) 如果为 True,则更改为选中状态,并将组中的其他设置为未选中 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
滑动条元素
A slider, horizontal or vertical
Slider(range=(None, None),
default_value=None,
resolution=None,
tick_interval=None,
orientation=None,
disable_number_display=False,
border_width=None,
relief=None,
change_submits=False,
enable_events=False,
disabled=False,
size=(None, None),
font=None,
background_color=None,
text_color=None,
key=None,
pad=None,
tooltip=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
范围 | Union[Tuple[int, int], Tuple[float, float]] 滑块的取值范围(最小值,最大值) |
default_value | Union[int, float] 滑块的起始值 |
分辨率 | Union[int, float] 滑块可以移动的最小量 |
刻度间隔 | Union[int, float] 应在滑块旁边显示可见刻度的频率 |
方向 | (str) 'horizontal' 或 'vertical' ('h' 或 'v' 也适用) |
禁用数字显示 | (bool) 如果为 True,则滑块元素不会显示数字 |
border_width | (int) 元素周围的边框宽度(以像素为单位) |
浮雕效果 | (枚举) 缓冲样式。RELIEF_RAISED RELIEF_SUNKEN RELIEF_FLAT RELIEF_RIDGE RELIEF_GROOVE RELIEF_SOLID |
change_submits | (bool) * 已废弃,请勿使用!与 enable_events 相同 |
enable_events | (布尔值) 如果为True,则移动滑块将生成事件 |
disabled | (bool) 为元素设置禁用状态 |
size | 元组[int, int] (字符宽度,行数) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
background_color | (字符串) 滑块背景颜色 |
text_color | (字符串) 滑块文字颜色 |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 鼠标悬停时出现的文本 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改滑块元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
Update(value=None,
range=(None, None),
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | 联合[int, float] 设置当前滑块值 |
范围 | 联合[元组[int, int],元组[float, float]] 设置滑块的新范围 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改滑块元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
update(value=None,
range=(None, None),
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | 联合[int, float] 设置当前滑块值 |
范围 | 联合[元组[int, int],元组[float, float]] 设置滑块的新范围 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
旋钮元素
A spinner with up/down buttons and a single line of text. Choose 1 values from list
Spin(values,
initial_value=None,
disabled=False,
change_submits=False,
enable_events=False,
size=(None, None),
auto_size_text=None,
font=None,
background_color=None,
text_color=None,
key=None,
pad=None,
tooltip=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
values | 任意类型的列表 |
初始值 | (任意类型) 在窗口中显示的初始项目。从提供的值列表中选择 |
disabled | (bool) 设置禁用状态 |
change_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 启用元素特定事件。当项目更改时发生 Spin 事件 |
size | Tuple[int, int] (width, height) 宽度 = 字符数,高度 = 行数 |
auto_size_text | (bool) 如果为True,则将元素的大小设置为与文本长度相匹配 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
tooltip | (str) 鼠标悬停时出现的文本 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
返回当前在滚动框中显示的选定值。此值将与提供的选项列表相同。如果列表项是整数,则返回的项将是整数(而不是字符串)
Get()
名称 | 含义 |
---|---|
return | (任意类型) 当前可见条目 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改滚动元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
Update(value=None,
values=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (任意类型) 从列表中选择当前值 |
values | 任意类型的列表 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get
返回当前在滚动框中显示的选定值。此值将与提供的选项列表相同。如果列表项是整数,则返回的项将是整数(而不是字符串)
get()
名称 | 含义 |
---|---|
return | (任意类型) 当前可见条目 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改滚动元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
update(value=None,
values=None,
disabled=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (任意类型) 从列表中选择当前值 |
values | 任意类型的列表 |
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
状态栏元素
A StatusBar Element creates the sunken text-filled strip at the bottom. Many Windows programs have this line
StatusBar(text,
size=(None, None),
auto_size_text=None,
click_submits=None,
enable_events=False,
relief="sunken",
font=None,
text_color=None,
background_color=None,
justification=None,
pad=None,
key=None,
tooltip=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
text | (字符串) 将在小部件中显示的文本 |
size | 元组[(int),(int)] (w,h) w=字符宽,h=行高 |
auto_size_text | (布尔值) 如果为True,则大小应适应文本长度 |
click_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (布尔值) 打开元素特定事件。状态栏事件在点击条时发生 |
浮雕效果 | (枚举) 缓冲样式。值与进度条缓冲值相同。可以是常量或字符串:RELIEF_RAISED RELIEF_SUNKEN RELIEF_FLAT RELIEF_RIDGE RELIEF_GROOVE RELIEF_SOLID |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
text_color | (str) 文本颜色 |
background_color | (str) 背景颜色 |
justification | (字符串) 在提供的大小空间内对字符串进行对齐。有效选择 = left ,right ,center |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
tooltip | (str) 鼠标悬停时出现的文本 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改状态栏元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
Update(value=None,
background_color=None,
text_color=None,
font=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (字符串) 要显示的新文本 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
可见 | (bool)设置元素的可见状态 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改状态栏元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
update(value=None,
background_color=None,
text_color=None,
font=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (字符串) 要显示的新文本 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
可见 | (bool)设置元素的可见状态 |
标签元素
Tab Element is another "Container" element that holds a layout and displays a tab with text. Used with TabGroup only
Tabs are never placed directly into a layout. They are always "Contained" in a TabGroup layout
Tab(title,
layout,
title_color=None,
background_color=None,
font=None,
pad=None,
disabled=False,
border_width=None,
key=None,
tooltip=None,
right_click_menu=None,
visible=True,
element_justification="left",
metadata=None)
参数说明
名称 | 含义 |
---|---|
title | (字符串) 标签上显示的文本 |
布局 | 列表[列表[元素]] 标签中将显示的元素布局 |
标题颜色 | (字符串) 标签文本的颜色(注意目前对tkinter不起作用) |
background_color | (字符串) 整个布局的背景颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
disabled | (bool) 如果为 True,则按钮将被创建为禁用状态 |
border_width | (int) 元素周围的边框宽度(以像素为单位) |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
element_justification | (字符串) 标签内的所有元素都将有此对齐 'left','right','center' 是有效值 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
选择
创建一个模拟用户点击标签的tkinter事件。必须首先调用window.Finalize / Read!
Select()
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改标签元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
Update(disabled=None, visible=None)
参数说明
名称 | 含义 |
---|---|
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
选择
创建一个模拟用户点击标签的tkinter事件。必须首先调用window.Finalize / Read!
select()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改标签元素的某些设置。必须在调用Window.Read
或Window.Finalize
之前
update(disabled=None, visible=None)
参数说明
名称 | 含义 |
---|---|
disabled | (bool)元素的禁用或启用状态 |
可见 | (bool)控制元素的可见性 |
标签组元素
TabGroup Element groups together your tabs into the group of tabs you see displayed in your window
TabGroup(layout,
tab_location=None,
title_color=None,
tab_background_color=None,
selected_title_color=None,
selected_background_color=None,
background_color=None,
font=None,
change_submits=False,
enable_events=False,
pad=None,
border_width=None,
theme=None,
key=None,
tooltip=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
布局 | 列表[列表[标签]] 标签布局。与正常布局不同。所有标签都应在第一行 |
标签位置 | (字符串) 标签将显示的位置。选择项是 left,right,top,bottom,lefttop,leftbottom,righttop,rightbottom,bottomleft,bottomright,topleft,topright |
标题颜色 | (字符串) 标签上的文本颜色 |
标签背景颜色 | (字符串) 未选中的所有标签的颜色 |
选定标题颜色 | (字符串) 选定时的标签文本颜色 |
选定背景颜色 | (字符串) 选定时的标签颜色 |
background_color | (字符串) 标签所在背景区域的颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
change_submits | (bool) * 已废弃,请勿使用!与 enable_events 相同 |
enable_events | (布尔值) 如果为True,则切换标签将生成事件 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
border_width | (int) 元素周围的边框宽度(以像素为单位) |
主题 | (枚举) 已弃用 - 您只能使用设置选项或在创建窗口时指定主题。无法基于元素指定 |
键 | (any) 唯一标识此元素的所有其他元素的值。在查找元素或返回值时使用。必须是窗口唯一的 |
tooltip | (str) 鼠标悬停时出现的文本 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
从标签名称查找键
在布局中搜索以找到与标签上文本匹配的键。意味着名称应该是唯一的
FindKeyFromTabName(tab_name)
参数说明
名称 | 含义 |
---|---|
标签名称 | |
return | 联合[key,None] 返回键或None如果没有找到键 |
获取
返回标签组的当前值,这将是当前选定标签的KEY或标签上的文本(如果没有定义键)。如果发生错误,则返回None。请注意,这正好与从Window.Read调用的数据相同。您确定您正在正确使用此方法吗?
Get()
名称 | 含义 |
---|---|
return | 联合[Any,None] 当前选定标签的键或没有键的标签的文本 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
从标签名称查找键
在布局中搜索以找到与标签上文本匹配的键。意味着名称应该是唯一的
find_key_from_tab_name(tab_name)
参数说明
名称 | 含义 |
---|---|
标签名称 | |
return | 联合[key,None] 返回键或None如果没有找到键 |
get
返回标签组的当前值,这将是当前选定标签的KEY或标签上的文本(如果没有定义键)。如果发生错误,则返回None。请注意,这正好与从Window.Read调用的数据相同。您确定您正在正确使用此方法吗?
get()
名称 | 含义 |
---|---|
return | 联合[Any,None] 当前选定标签的键或没有键的标签的文本 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
布局
可以使用Window.Layout方法使用,但最好在创建时使用layout参数
layout(rows)
参数说明
名称 | 含义 |
---|---|
rows | List[List[Element]] 元素行 |
return | (框架) 用于链式调用 |
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
表格元素
Table(values,
headings=None,
visible_column_map=None,
col_widths=None,
def_col_width=10,
auto_size_columns=True,
max_col_width=20,
select_mode=None,
display_row_numbers=False,
num_rows=None,
row_height=None,
font=None,
justification="right",
text_color=None,
background_color=None,
alternating_row_color=None,
header_text_color=None,
header_background_color=None,
header_font=None,
row_colors=None,
vertical_scroll_only=True,
hide_vertical_scroll=False,
size=(None, None),
change_submits=False,
enable_events=False,
bind_return_key=False,
pad=None,
key=None,
tooltip=None,
right_click_menu=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
values | 列表[列表[联合[str,int,float]]] |
标题 | 列表[str] 顶部行要显示的标题 |
visible_column_map | 列表[bool] 每列一个条目。False 表示该列不显示 |
col_widths | 列表[int] 每列将占用的字符数 |
def_col_width | (int) 默认列宽度(字符) |
auto_size_columns | (bool) 如果为 True,则列将自动调整大小 |
max_col_width | (int) 所有列的最大宽度(字符) |
选择模式 | (枚举) 选择模式。有效值以 "TABLE_SELECT_MODE_" 开头。有效值有:TABLE_SELECT_MODE_NONE TABLE_SELECT_MODE_BROWSE TABLE_SELECT_MODE_EXTENDED |
display_row_numbers | (bool) 如果为 True,则表格的第一列将是行号 |
num_rows | (int) 要一次性显示的表格行数 |
row_height | (int) 单行的高度(像素) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
justification | (str) 'left', 'right', 'center' 是有效选择 |
text_color | (str) 文本颜色 |
background_color | (str) 背景颜色 |
alternating_row_color | (str) 如果设置,则每隔一行将具有此颜色作为背景。 |
header_text_color | (str) 设置标题的文本颜色 |
header_background_color | (str) 设置标题的背景颜色 |
header_font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
row_colors | 列表[Union[Tuple[int, str], Tuple[Int, str, str]]] 列表元组 (row, 背景颜色) 或 (row, 前景颜色, 背景颜色)。将列表中行的颜色设置为提供的颜色(注意可选的前景色) |
vertical_scroll_only | (bool) 如果为 True,则只有垂直滚动条将可见 |
hide_vertical_scroll | (bool) 如果为 True,则垂直滚动条将被隐藏 |
size | Tuple[int, int] 不使用!请使用 num_rows |
change_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 启用元素特定事件。当行被点击时发生表格事件 |
bind_return_key | (bool) 如果为 True,则按回车键将导致来自表格的事件,同时如果此参数为 True,则左键双击也将生成事件 |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
获取
tkinter 端的占位函数。在 Qt 端,您可以在值被编辑的情况下回读表中的值。尚不清楚如何在 tkinter 中启用树的编辑,所以只返回在创建或更新表格时用户提供的值。
Get()
名称 | 含义 |
---|---|
return | 列表[列表[Any]] 当前表格的值(目前是最初提供的或更新的值) |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改表格元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
Update(values=None,
num_rows=None,
visible=None,
select_rows=None,
alternating_row_color=None,
row_colors=None)
参数说明
名称 | 含义 |
---|---|
values | 列表[列表[Union[str, int, float]]] 要显示的新二维表格 |
num_rows | (int) 要显示的行数 |
可见 | (bool) 如果为 True,则将可见 |
select_rows | 列表[int] 要选择的行列表,就像用户所做的那样 |
alternating_row_color | (str) 要使每隔一行具有的颜色 |
row_colors | 列表[Union[Tuple[int, str], Tuple[Int, str, str]]] 列表元组 (row, 背景颜色) 或 (row, 前景颜色, 背景颜色)。更改列表中行的颜色为提供的颜色(注意可选的前景色) |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get
tkinter 端的占位函数。在 Qt 端,您可以在值被编辑的情况下回读表中的值。尚不清楚如何在 tkinter 中启用树的编辑,所以只返回在创建或更新表格时用户提供的值。
get()
名称 | 含义 |
---|---|
return | 列表[列表[Any]] 当前表格的值(目前是最初提供的或更新的值) |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改表格元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
update(values=None,
num_rows=None,
visible=None,
select_rows=None,
alternating_row_color=None,
row_colors=None)
参数说明
名称 | 含义 |
---|---|
values | 列表[列表[Union[str, int, float]]] 要显示的新二维表格 |
num_rows | (int) 要显示的行数 |
可见 | (bool) 如果为 True,则将可见 |
select_rows | 列表[int] 要选择的行列表,就像用户所做的那样 |
alternating_row_color | (str) 要使每隔一行具有的颜色 |
row_colors | 列表[Union[Tuple[int, str], Tuple[Int, str, str]]] 列表元组 (row, 背景颜色) 或 (row, 前景颜色, 背景颜色)。更改列表中行的颜色为提供的颜色(注意可选的前景色) |
文本元素
Text - Display some text in the window. Usually this means a single line of text. However, the text can also be multiple lines. If multi-lined there are no scroll bars.
Text(text="",
size=(None, None),
auto_size_text=None,
click_submits=False,
enable_events=False,
relief=None,
font=None,
text_color=None,
background_color=None,
border_width=None,
justification=None,
pad=None,
key=None,
right_click_menu=None,
tooltip=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
text | (str) 要显示的文本。可以包含 /n 以实现多行 |
size | Tuple[int, int] (width, height) 宽度 = 字符数,高度 = 行数 |
auto_size_text | (bool) 如果为 True,则文本元素的尺寸将调整以适应 'text' 参数中提供的字符串 |
click_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 启用元素特定事件。当文本被点击时发生文本事件 |
浮雕效果 | (str/枚举) 文本周围的边缘样式。值与进度条边缘样式相同。应该是以 "RELIEF_" 开头的常量 - RELIEF_RAISED, RELIEF_SUNKEN, RELIEF_FLAT, RELIEF_RIDGE, RELIEF_GROOVE, RELIEF_SOLID |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
text_color | (str) 文本颜色 |
background_color | (str) 背景颜色 |
border_width | (int) 边框的像素数(如果使用边缘样式) |
justification | (字符串) 在提供的大小空间内对字符串进行对齐。有效选择 = left ,right ,center |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
tooltip | (str) 鼠标悬停时出现的文本 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改文本元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
Update(value=None,
background_color=None,
text_color=None,
font=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (字符串) 要显示的新文本 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
可见 | (bool)设置元素的可见状态 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改文本元素的某些设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
update(value=None,
background_color=None,
text_color=None,
font=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
value | (字符串) 要显示的新文本 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
可见 | (bool)设置元素的可见状态 |
工具提示元素
Create a tooltip for a given widget
(inspired by https://stackoverflow.com/a/36221216)
This is an INTERNALLY USED only class. Users should not refer to this class at all.
ToolTip(widget,
text,
timeout=400)
参数说明
名称 | 含义 |
---|---|
小部件 | (小部件类型不同) tkinter 小部件 |
text | (str) 工具提示的文本。它可以包含 |
timeout | (int) 鼠标必须静止的毫秒数,然后显示提示 |
enter
由 tkinter 在鼠标进入小部件时调用
enter(event=None)
参数说明
名称 | 含义 |
---|---|
event | 从 tkinter。具有鼠标的 x,y 坐标 |
hidetip
销毁工具提示窗口
hidetip()
leave
由 tktiner 在鼠标退出小部件时调用
leave(event=None)
参数说明
名称 | 含义 |
---|---|
event | 来自 tkinter 的事件信息,该信息不会由函数使用。 |
计划
安排一个计时器来计时鼠标悬停的时间
schedule()
显示提示
创建一个顶部提示窗口,其中包含提示文本
showtip()
取消计划
取消用于计时鼠标悬停的计时器
unschedule()
Tree元素
Tree Element - Presents data in a tree-like manner, much like a file/folder browser. Uses the TreeData class
to hold the user's data and pass to the element for display.
Tree(data=None,
headings=None,
visible_column_map=None,
col_widths=None,
col0_width=10,
def_col_width=10,
auto_size_columns=True,
max_col_width=20,
select_mode=None,
show_expanded=False,
change_submits=False,
enable_events=False,
font=None,
justification="right",
text_color=None,
background_color=None,
header_text_color=None,
header_background_color=None,
header_font=None,
num_rows=None,
row_height=None,
pad=None,
key=None,
tooltip=None,
right_click_menu=None,
visible=True,
metadata=None)
参数说明
名称 | 含义 |
---|---|
data | (TreeData) 使用 PySimpleGUI 提供的 TreeData 类表示的数据 |
标题 | List[str] 每列的单独标题列表 |
visible_column_map | List[bool] 决定是否显示列。如果留空,则显示所有列 |
col_widths | List[int] 列宽列表,以便可以单独控制列宽 |
col0_width | (int) 列 0 的大小,其中将可选地显示行号 |
def_col_width | (int) 默认列宽 |
auto_size_columns | (bool) 如果为 True,则使用列的内容确定列的大小 |
max_col_width | (int) 列可以的最大大小 |
选择模式 | (枚举) 使用与 Table Element 上的值相同的值。有效值包括:TABLE_SELECT_MODE_NONE TABLE_SELECT_MODE_BROWSE TABLE_SELECT_MODE_EXTENDED |
显示展开 | (bool) 如果为 True,则树将完全展开地初始化显示 |
change_submits | (bool) 不要使用。仅列出以保留向后兼容性 - 使用 enable_events 代替 |
enable_events | (bool) 启用特定元素的事件。当行被点击时发生树事件 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
justification | (str) 'left', 'right', 'center' 是有效选择 |
text_color | (str) 文本颜色 |
background_color | (str) 背景颜色 |
header_text_color | (str) 设置标题的文本颜色 |
header_background_color | (str) 设置标题的背景颜色 |
header_font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
num_rows | (int) 要一次性显示的表格行数 |
row_height | (int) 单行的高度(像素) |
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
键 | (任何)与window.FindElement一起使用,并通过返回值唯一标识此元素 |
tooltip | (str) 鼠标悬停时出现的文本 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
可见 | (bool)设置元素的可见状态 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
更新
更改一些树元素的设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
Update(values=None,
key=None,
value=None,
text=None,
icon=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
values | (TreeData) 树的表示 |
键 | (Any) 识别要更新的树中的特定项 |
value | (Any) 将键标识的节点设置为特定值 |
text | (str) 将键标识的节点设置为这个字符串 |
icon | Union[bytes, str] 可以是 base64 图标或图标的文件名 |
可见 | (bool)控制元素的可见性 |
add_treeview_data
不是一个用户函数。递归方法,用于将树数据插入 tkinter treeview 小部件。
add_treeview_data(node)
参数说明
名称 | 含义 |
---|---|
node | (TreeData) 要插入的节点。将递归地从起点向下插入所有节点 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
treeview_selected
不是一个用户函数。当从树中选择项目时发生的回调函数。在此方法中,它保存报告的选定内容,以便可以正确返回。
treeview_selected(event)
参数说明
名称 | 含义 |
---|---|
event | (Any) 由 tkinter 传入的事件参数。未使用 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
更新
更改一些树元素的设置。必须在调用 Window.Read
或 Window.Finalize
之前进行
update(values=None,
key=None,
value=None,
text=None,
icon=None,
visible=None)
参数说明
名称 | 含义 |
---|---|
values | (TreeData) 树的表示 |
键 | (Any) 识别要更新的树中的特定项 |
value | (Any) 将键标识的节点设置为特定值 |
text | (str) 将键标识的节点设置为这个字符串 |
icon | Union[bytes, str] 可以是 base64 图标或图标的文件名 |
可见 | (bool)控制元素的可见性 |
TreeData 元素
Class that user fills in to represent their tree data. It's a very simple tree representation with a root "Node"
with possibly one or more children "Nodes". Each Node contains a key, text to display, list of values to display
and an icon. The entire tree is built using a single method, Insert. Nothing else is required to make the tree.
实例化对象,初始化树数据,为您创建根节点
TreeData()
插入
将节点插入树。用户通过插入节点来构建树,这是在 TreeData 类中唯一可调用的方法
Insert(parent,
key,
text,
values,
icon=None)
参数说明
名称 | 含义 |
---|---|
parent | (Node) 父节点 |
键 | (Any) 用于唯一标识此节点 |
text | (str) 在此节点位置显示的文本 |
values | List[Any] 在此节点位置显示的值列表 |
icon | Union[str, bytes] |
节点
包含有关树中单个节点信息
Node(parent,
key,
text,
values,
icon=None)
插入
将节点插入树。用户通过插入节点来构建树,这是在 TreeData 类中唯一可调用的方法
insert(parent,
key,
text,
values,
icon=None)
参数说明
名称 | 含义 |
---|---|
parent | (Node) 父节点 |
键 | (Any) 用于唯一标识此节点 |
text | (str) 在此节点位置显示的文本 |
values | List[Any] 在此节点位置显示的值列表 |
icon | Union[str, bytes] |
垂直分隔符元素
Vertical Separator Element draws a vertical line at the given location. It will span 1 "row". Usually paired with
Column Element if extra height is needed
VerticalSeparator(pad=None)
参数说明
名称 | 含义 |
---|---|
pad | (int, int) 或 ((int, int),(int,int)) 围绕元素的填充量(左/右,上/下)或 ((left, right), (top, bottom)) |
ButtonReboundCallback
*** 已弃用 *** 使用Element.bind代替
ButtonReboundCallback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
设置焦点
将当前焦点设置为该元素
SetFocus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
设置工具提示
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
SetTooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
bind
用于向元素添加tkinter事件。tkinter特定数据在Element的成员变量user_bind_event中
bind(bind_string, key_modifier)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
key_modifier | 当返回事件时,要添加到元素键的附加数据 |
button_rebound_callback
*** 已弃用 *** 使用Element.bind代替
button_rebound_callback(event)
参数说明
名称 | 含义 |
---|---|
event | (未知)在此函数中未使用。 |
扩展
使元素在X和Y方向上扩展以填充可用空间。可以指定哪个或两个方向
expand(expand_x=False,
expand_y=False,
expand_row=True)
参数说明
名称 | 含义 |
---|---|
expand_x | (Bool)如果为True,元素将在水平方向上扩展 |
expand_y | (Bool)如果为True,元素将在垂直方向上扩展 |
expand_row | (Bool)如果为True,包含元素的行也将扩展。如果没有这个,你的元素将“被困”在行内 |
get_size
以像素为单位返回元素的尺寸。必须小心,因为某些元素使用字符来指定其大小,但在调用此get_size方法时将返回像素。
get_size()
名称 | 含义 |
---|---|
return | Tuple[int, int] - 元素的宽度和高度 |
hide_row
隐藏包含元素的整个行。如果你必须隐藏元素时删除所有空间,包括行容器,请使用此功能
hide_row()
set_focus
将当前焦点设置为该元素
set_focus(force=False)
参数说明
名称 | 含义 |
---|---|
强制 | (bool)如果为True,则调用focus_force,否则调用focus_set |
set_size
将元素的尺寸更改为特定大小。可以指定None作为其中一个尺寸,以便只更改元素的尺寸之一。
set_size(size=(None, None))
参数说明
名称 | 含义 |
---|---|
size | Tuple[int, int] - 尺寸以字符为单位,行通常如此。在某些情况下,它们是像素 |
set_tooltip
由应用程序调用以更改元素的提示文本。通常使用Element对象调用,例如:window.Element('key').SetToolTip('新提示')。
set_tooltip(tooltip_text)
参数说明
名称 | 含义 |
---|---|
tooltip_text | (str)要显示的工具提示文本。 |
unhide_row
取消隐藏(再次使其可见)包含元素的行容器。注意,它很可能会在窗口/容器底部重新出现。
unhide_row()
窗口元素
Represents a single Window
Window(title,
layout=None,
default_element_size=(45, 1),
default_button_element_size=(None, None),
auto_size_text=None,
auto_size_buttons=None,
location=(None, None),
size=(None, None),
element_padding=None,
margins=(None, None),
button_color=None,
font=None,
progress_bar_color=(None, None),
background_color=None,
border_depth=None,
auto_close=False,
auto_close_duration=3,
icon=None,
force_toplevel=False,
alpha_channel=1,
return_keyboard_events=False,
use_default_focus=True,
text_justification=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
resizable=False,
disable_close=False,
disable_minimize=False,
right_click_menu=None,
transparent_color=None,
debugger_enabled=True,
finalize=False,
element_justification="left",
ttk_theme=None,
use_ttk_buttons=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
title | (str) 将显示在标题栏和任务栏上的标题 |
布局 | List[List[Elements]] 窗口的布局。也可以在 Layout 方法中指定 |
default_element_size | Tuple[int, int] (宽度,高度) 以字符(宽)和行(高)为单位的大小,适用于此窗口中的所有元素 |
default_button_element_size | Tuple[int, int] (宽度,高度) 以字符(宽)和行(高)为单位的大小,适用于此窗口中的所有按钮元素 |
auto_size_text | (bool) 如果窗口中的元素应大小恰好适合文本长度,则为 True |
auto_size_buttons | (bool) 如果窗口中的按钮应大小恰好适合此上的文本,则为 True |
location | Tuple[int, int] (x,y) 位置,以像素为单位,用于在屏幕上定位窗口的左上角。默认情况下,在屏幕上居中 |
size | Tuple[int, int] (宽度,高度) 以像素为单位的大小,用于此窗口。通常窗口自动调整大小以适合内容,而不是由用户设置为绝对大小 |
element_padding | 元组[int, int]或((int, int), (int, int)) 在窗口元素周围放置默认填充量(左/右,上/下)或((左,右),(上,下)) |
边距 | 元组[int, int] (左/右,上/下) 在显示元素之前,在窗口框架边缘保留的像素数。 |
button_color | 元组[str, str] (文字颜色,按钮颜色) 窗口中所有按钮的默认按钮颜色 |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
进度条颜色 | 元组[str, str] (条形颜色,背景颜色) 为窗口中所有进度条设置默认颜色 |
background_color | (str) 背景颜色 |
边框深度 | (int) 窗口中所有元素的默认边框深度(宽度) |
auto_close | (bool) 如果为True,窗口将自动关闭自己 |
auto_close_duration | (int) 在关闭窗口之前等待的秒数 |
icon | Union[str, str] 可以是文件名或Base64值。 |
强制顶层窗口 | (bool) 如果为True,将导致此窗口跳过隐藏主窗口的正常使用 |
alpha_channel | (float) 设置窗口的不透明度。0 = 不可见 1 = 完全可见。介于0 & 1之间的值将在某些环境中产生半透明窗口(树莓派始终具有此值1且无法更改。 |
返回键盘事件 | (bool) 如果为True,键盘按键将作为从Read调用返回的事件 |
使用默认焦点 | (bool) 如果为True,将使用默认焦点算法将焦点设置到“正确”的元素 |
文本对齐 | (str) Union ['left', 'right', 'center'] 窗口中所有文本元素的默认文本对齐 |
no_titlebar | (bool) 如果为true,则窗口上不会显示标题栏或框架。这意味着您不能最小化窗口,它也不会在任务栏中显示 |
grab_anywhere | (bool) 如果为True,则可以使用鼠标点击和拖动来移动窗口。除了某些系统上的输入字段外,窗口的几乎任何位置都可以工作 |
keep_on_top | (bool) 如果为True,窗口将位于屏幕上所有其他窗口的顶部。如果使用此参数创建另一个窗口,则可以将其推下 |
可调整大小 | (bool) 如果为True,则允许用户调整窗口大小。注意,并非所有元素在调整大小时都会更改大小或位置。 |
禁用关闭 | (bool) 如果为True,则窗口右上角的X按钮将不起作用。请谨慎使用,并始终为用户提供退出方式 |
禁用最小化 | (bool) 如果为True,则用户无法最小化窗口。这对于完全覆盖整个屏幕并保持这种方式很有用。 |
右键菜单 | List[List[Union[List[str],str]]] 当此元素被右键点击时显示的菜单项列表。具体格式请参见用户文档。 |
transparent_color | (str) 任何具有此颜色的窗口部分都将完全透明。您甚至可以点击这些位置到下面的窗口。 |
启用调试器 | (bool) 如果为True,则内部调试器将被启用 |
最终化 | (bool) 如果为True,则将调用Finalize方法。请使用此方法而不是链式调用.Finalize以获得更干净的代码 |
element_justification | (str) 窗口本身中的所有元素都将具有此对齐方式 'left','right','center' 是有效值 |
ttk主题 | (str) 设置窗口的tkinter ttk "主题"。默认 = DEFAULT_TTK_THEME。将所有ttk小部件设置为该主题的默认值 |
use_ttk_buttons | (bool) 影响窗口中的所有按钮。True = 使用ttk按钮。False = 不使用ttk按钮。None = 如果在Mac上则使用ttk按钮 |
元数据 | (任何)可以设置任何用户元数据的元数据 |
添加行
将单个行元素添加到窗口的self.Rows变量中。一般而言,这不是用户构建窗口布局的方法。用户创建单个布局(列表的列表),并将其作为参数传递给窗口对象,或调用Window.Layout(layout)
AddRow(args)
参数说明
名称 | 含义 |
---|---|
*args | 元素列表 |
添加行
遍历元素列表的列表,并将每个行、列表添加到布局中。这不是创建窗口的最佳方式。一次性发送整个布局并将其作为参数传递给窗口调用更好。
AddRows(rows)
参数说明
名称 | 含义 |
---|---|
rows | List[List[Elements]] 元素列表的列表 |
AlphaChannel
属性:AlphaChannel
一个属性,用于更改当前alpha通道值(内部值)
名称 | 含义 |
---|---|
return | (float) 根据自身设置当前alpha通道值,而不是直接从tkinter读取 |
BringToFront
将此窗口带到所有其他窗口的顶部(可能不会带到“始终保持在顶部”的窗口之前)
BringToFront()
关闭
关闭窗口。即使窗口已被销毁,用户也可以安全地调用。在完成窗口操作后,应始终调用此方法,以确保在您的线程中正确释放资源。
Close()
CurrentLocation
获取窗口左上角当前位置
CurrentLocation()
名称 | 含义 |
---|---|
return | Tuple[(int), (int)] 以元组形式表示的x和y位置(x,y) |
Disable
禁用窗口接受用户输入
Disable()
DisableDebugger
禁用内部调试器。默认情况下,调试器是启用的
DisableDebugger()
Disappear
使窗口“消失”在屏幕上,但保持在任务栏上。它是通过将alpha通道设置为0来实现的。注意,在某些平台上alpha不受支持。在这些平台上,窗口将保持显示。例如,树莓派没有alpha设置
Disappear()
Elem
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
Elem(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
元素
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
Element(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
Enable
在之前被禁用后重新启用窗口接受用户输入
Enable()
EnableDebugger
启用内部调试器。默认情况下,调试器是启用的
EnableDebugger()
Fill
根据“values字典”用数据填充输入字段元素
Fill(values_dict)
参数说明
名称 | 含义 |
---|---|
values_dict | (Dict[Any:Any]) {Element键:值} 对 |
return | (Window) 返回self,因此可以与其他方法一起使用 |
Finalize
使用此方法将布局构建为实际的tkinter窗口。实际上,此方法类似于Read(timeout=0)。它不阻塞,并使用您的布局创建tkinter小部件来表示元素。有很多动作!
Finalize()
名称 | 含义 |
---|---|
return | (Window) 返回'self',因此可以进行方法链式调用(请了解它,因为它非常酷!) |
Find
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
Find(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
FindElement
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
FindElement(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
FindElementWithFocus
返回当前具有焦点的元素,该焦点由tkinter报告。如果没有找到元素,则返回None!
FindElementWithFocus()
名称 | 含义 |
---|---|
return | Union[Element, None] 如果找到具有焦点的元素,则返回Element;如果没有找到元素,则返回None |
GetScreenDimensions
获取屏幕尺寸。注意 - 必须已打开窗口才能执行此操作(请怪tkinter,而不是我)
GetScreenDimensions()
名称 | 含义 |
---|---|
return | Union[Tuple[None, None], Tuple[width, height]] 包含屏幕宽度和高度的元组(以像素为单位) |
GrabAnyWhereOff
在创建窗口后关闭“在任何位置抓取”功能。不要在尚未Finalize或Read的窗口上尝试。
GrabAnyWhereOff()
在任意位置抓取
在创建窗口后开启“在任意位置抓取”功能。不要在未最终化或读取的窗口上尝试。
GrabAnyWhereOn()
隐藏
隐藏窗口在屏幕和任务栏上
Hide()
布局
两种告诉窗口其布局的推荐方式之一。另一种方式是将布局作为参数传递给窗口对象。参数方法是当前推荐的方法。此Layout调用已从文档和演示程序中的示例中删除。尝试从历史中删除此调用,并将其替换为作为参数发送给窗口。
Layout(rows)
参数说明
名称 | 含义 |
---|---|
rows | 列表[列表[元素]] 整个布局 |
return | (Window self) 以便您可以链式调用方法 |
从磁盘加载
从先前的SaveToDisk调用中恢复值,该调用以Pickle格式保存返回的值字典
LoadFromDisk(filename)
参数说明
名称 | 含义 |
---|---|
filename | (str) 要加载的Pickle文件名 |
最大化
最大化窗口。在Windows系统上与Linux或mac系统不同。对于非Windows,root属性'-fullscreen'设置为True。对于Windows,“root”状态更改为“缩放”。这种差异的原因是在使用全屏选项时,有时会移除标题栏
Maximize()
最小化
将此窗口最小化到任务栏
Minimize()
Move
将此窗口的左上角移动到提供的x,y坐标
Move(x, y)
参数说明
名称 | 含义 |
---|---|
x | (int) 像素x坐标 |
y | (int) 像素y坐标 |
正常
将窗口恢复到非最大化状态。根据平台有所不同。有关更多信息,请参阅最大化。
Normal()
读取
Window类中最重要的方法!这是您从窗口获取所有数据的方法。传递一个超时(以毫秒为单位),等待最多timeout毫秒。如果没有其他GUI事件首先发生,将返回timeout_key。
Read(timeout=None, timeout_key="__TIMEOUT__")
参数说明
名称 | 含义 |
---|---|
timeout | (int) 在没有其他GUI事件首先发生时,Read将返回的超时毫秒数 |
timeout_key | (Any) 如果定时器过期,则从调用返回的值 |
return | Tuple[(Any), Union[Dict[Any:Any]], List[Any], None] (事件,值) (事件或timeout_key或None,值的字典或Window中所有元素的值列表) |
重新出现
通过恢复alpha通道使之前已“消失”的窗口(使用该方法)出现
Reappear()
刷新
通过调用tkroot.update()刷新窗口。有时可以用刷新代替读取。当您希望某些内容立即出现在窗口中(在调用此函数时)时使用此调用。没有此调用,您的更改将不会在下一个Read调用之前对用户可见。
Refresh()
名称 | 含义 |
---|---|
return | (Window) self 以便方法调用可以轻松“链式”调用 |
保存到磁盘
保存表单中每个输入区域包含的值。基本上保存了从Read调用返回的内容。它将这些结果保存到磁盘,使用pickle进行保存
SaveToDisk(filename)
参数说明
名称 | 含义 |
---|---|
filename | (str) 要以pickle形式保存值的文件名 |
发送到后台
将此窗口推送到窗口堆栈的底部。这是BringToFront的相反操作
SendToBack()
设置Alpha
设置窗口的Alpha通道。值在0到1之间,0是完全透明的
SetAlpha(alpha)
参数说明
名称 | 含义 |
---|---|
alpha | (float) 0到1。0是完全透明的。1是完全可见和实心的(看不见通过) |
设置图标
设置显示在标题栏和任务栏上的图标。可以传递
- 一个文件名,对于Windows必须是.ICO图标文件
- 一个字节对象
- 一个存储在变量中的BASE64编码的文件
SetIcon(icon=None, pngbase64=None)
参数说明
名称 | 含义 |
---|---|
icon | (str) 文件名或字节对象 |
pngbase64 | (str) BASE64编码的GIF或PNG文件 |
设置透明色
设置在窗口中将变得透明的颜色。具有此颜色的区域将是透明的。
SetTransparentColor(color)
参数说明
名称 | 含义 |
---|---|
color | (str) 定义透明颜色的字符串 |
大小
属性:大小
返回窗口当前像素大小
名称 | 含义 |
---|---|
return | 元组[(int), (int)] 窗口的宽度(width)和高度(height) |
取消隐藏
用于使用 Hide 方法隐藏的窗口恢复显示
UnHide()
VisibilityChanged
这是一个完全无用的方法,它什么也不做。它在这里是为了让 PySimpleGUIQt 程序可以调用它,然后相同的源代码可以在普通的 PySimpleGUI 上运行。
VisibilityChanged()
名称 | 含义 |
---|---|
return |
add_row
将单个行元素添加到窗口的self.Rows变量中。一般而言,这不是用户构建窗口布局的方法。用户创建单个布局(列表的列表),并将其作为参数传递给窗口对象,或调用Window.Layout(layout)
add_row(args)
参数说明
名称 | 含义 |
---|---|
*args | 元素列表 |
add_rows
遍历元素列表的列表,并将每个行、列表添加到布局中。这不是创建窗口的最佳方式。一次性发送整个布局并将其作为参数传递给窗口调用更好。
add_rows(rows)
参数说明
名称 | 含义 |
---|---|
rows | List[List[Elements]] 元素列表的列表 |
alpha_channel
属性:alpha_channel
一个属性,用于更改当前alpha通道值(内部值)
名称 | 含义 |
---|---|
return | (float) 根据自身设置当前alpha通道值,而不是直接从tkinter读取 |
bind
用于向窗口添加 tkinter 事件。tkinter 特定的数据在窗口的成员变量 user_bind_event 中
bind(bind_string, key)
参数说明
名称 | 含义 |
---|---|
bind_string | tkinter期望在其bind函数中的字符串 |
键 | 当 tkinter 事件发生时将生成的事件 |
bring_to_front
将此窗口带到所有其他窗口的顶部(可能不会带到“始终保持在顶部”的窗口之前)
bring_to_front()
close
关闭窗口。即使窗口已被销毁,用户也可以安全地调用。在完成窗口操作后,应始终调用此方法,以确保在您的线程中正确释放资源。
close()
current_location
获取窗口左上角当前位置
current_location()
名称 | 含义 |
---|---|
return | Tuple[(int), (int)] 以元组形式表示的x和y位置(x,y) |
disable
禁用窗口接受用户输入
disable()
disable_debugger
禁用内部调试器。默认情况下,调试器是启用的
disable_debugger()
disappear
使窗口“消失”在屏幕上,但保持在任务栏上。它是通过将alpha通道设置为0来实现的。注意,在某些平台上alpha不受支持。在这些平台上,窗口将保持显示。例如,树莓派没有alpha设置
disappear()
elem
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
elem(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
element
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
element(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
enable
在之前被禁用后重新启用窗口接受用户输入
enable()
enable_debugger
启用内部调试器。默认情况下,调试器是启用的
enable_debugger()
extend_layout
向此窗口内部现有容器元素中添加新行
extend_layout(container, rows)
参数说明
名称 | 含义 |
---|---|
container | (Union[Frame, Column, Tab]) - 布局将放置其中的容器元素 |
rows | (List[List[Element]]) - 要添加的布局 |
return | (Window) self 因此可以链式调用 |
fill
根据“values字典”用数据填充输入字段元素
fill(values_dict)
参数说明
名称 | 含义 |
---|---|
values_dict | (Dict[Any:Any]) {Element键:值} 对 |
return | (Window) 返回self,因此可以与其他方法一起使用 |
最终化
使用此方法将布局构建为实际的tkinter窗口。实际上,此方法类似于Read(timeout=0)。它不阻塞,并使用您的布局创建tkinter小部件来表示元素。有很多动作!
finalize()
名称 | 含义 |
---|---|
return | (Window) 返回'self',因此可以进行方法链式调用(请了解它,因为它非常酷!) |
find
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
find(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
find_element
查找与提供的键关联的元素对象。此方法不再需要用户调用
您可以通过编写此语句执行相同操作:element = window[key]
您可以使用[ ]代替整个“FindElement”函数名
通常与对元素Update方法的调用(或任何其他元素方法!)结合使用:window[key].Update(new_value)
与“旧方法”window.FindElement(key).Update(new_value)相比
此调用可以简写为以下任何一种:FindElement == Element == Find 请记住,如果未找到匹配项,此调用将返回None,这可能导致您的代码崩溃,如果不进行检查的话。
find_element(key, silent_on_error=False)
参数说明
名称 | 含义 |
---|---|
键 | (任意)与window.FindElement一起使用,并使用返回值来唯一标识此元素 |
silent_on_error | (bool) 如果为True,则不显示弹出窗口或打印键错误的警告 |
return | Union[Element, Error Element, None] 返回值可以是 * 如果找到匹配的键,则匹配的Element * 如果silent_on_error为False,则Error Element * 如果silent_on_error为True,则None |
find_element_with_focus
返回当前具有焦点的元素,该焦点由tkinter报告。如果没有找到元素,则返回None!
find_element_with_focus()
名称 | 含义 |
---|---|
return | Union[Element, None] 如果找到具有焦点的元素,则返回Element;如果没有找到元素,则返回None |
get_screen_dimensions
获取屏幕尺寸。注意 - 必须已打开窗口才能执行此操作(请怪tkinter,而不是我)
get_screen_dimensions()
名称 | 含义 |
---|---|
return | Union[Tuple[None, None], Tuple[width, height]] 包含屏幕宽度和高度的元组(以像素为单位) |
get_screen_size
返回由 tkinter 确定的“屏幕”大小。这可能会根据您的操作系统和系统上安装的监视器数量而有所不同。对于 Windows,返回主监视器的大小。在某些多监视器 Linux 系统上,监视器会合并,总大小报告为一个屏幕。
get_screen_size() -> Tuple[int, int] - Size of the screen in pixels as determined by tkinter
grab_any_where_off
在创建窗口后关闭“在任何位置抓取”功能。不要在尚未Finalize或Read的窗口上尝试。
grab_any_where_off()
grab_any_where_on
在创建窗口后开启“在任意位置抓取”功能。不要在未最终化或读取的窗口上尝试。
grab_any_where_on()
hide
隐藏窗口在屏幕和任务栏上
hide()
布局
两种告诉窗口其布局的推荐方式之一。另一种方式是将布局作为参数传递给窗口对象。参数方法是当前推荐的方法。此Layout调用已从文档和演示程序中的示例中删除。尝试从历史中删除此调用,并将其替换为作为参数发送给窗口。
layout(rows)
参数说明
名称 | 含义 |
---|---|
rows | 列表[列表[元素]] 整个布局 |
return | (Window self) 以便您可以链式调用方法 |
load_from_disk
从先前的SaveToDisk调用中恢复值,该调用以Pickle格式保存返回的值字典
load_from_disk(filename)
参数说明
名称 | 含义 |
---|---|
filename | (str) 要加载的Pickle文件名 |
maximize
最大化窗口。在Windows系统上与Linux或mac系统不同。对于非Windows,root属性'-fullscreen'设置为True。对于Windows,“root”状态更改为“缩放”。这种差异的原因是在使用全屏选项时,有时会移除标题栏
maximize()
minimize
将此窗口最小化到任务栏
minimize()
move
将此窗口的左上角移动到提供的x,y坐标
move(x, y)
参数说明
名称 | 含义 |
---|---|
x | (int) 像素x坐标 |
y | (int) 像素y坐标 |
normal
将窗口恢复到非最大化状态。根据平台有所不同。有关更多信息,请参阅最大化。
normal()
read
Window类中最重要的方法!这是您从窗口获取所有数据的方法。传递一个超时(以毫秒为单位),等待最多timeout毫秒。如果没有其他GUI事件首先发生,将返回timeout_key。
read(timeout=None, timeout_key="__TIMEOUT__")
参数说明
名称 | 含义 |
---|---|
timeout | (int) 在没有其他GUI事件首先发生时,Read将返回的超时毫秒数 |
timeout_key | (Any) 如果定时器过期,则从调用返回的值 |
return | Tuple[(Any), Union[Dict[Any:Any]], List[Any], None] (事件,值) (事件或timeout_key或None,值的字典或Window中所有元素的值列表) |
reappear
通过恢复alpha通道使之前已“消失”的窗口(使用该方法)出现
reappear()
refresh
通过调用tkroot.update()刷新窗口。有时可以用刷新代替读取。当您希望某些内容立即出现在窗口中(在调用此函数时)时使用此调用。没有此调用,您的更改将不会在下一个Read调用之前对用户可见。
refresh()
名称 | 含义 |
---|---|
return | (Window) self 以便方法调用可以轻松“链式”调用 |
save_to_disk
保存表单中每个输入区域包含的值。基本上保存了从Read调用返回的内容。它将这些结果保存到磁盘,使用pickle进行保存
save_to_disk(filename)
参数说明
名称 | 含义 |
---|---|
filename | (str) 要以pickle形式保存值的文件名 |
send_to_back
将此窗口推送到窗口堆栈的底部。这是BringToFront的相反操作
send_to_back()
set_alpha
设置窗口的Alpha通道。值在0到1之间,0是完全透明的
set_alpha(alpha)
参数说明
名称 | 含义 |
---|---|
alpha | (float) 0到1。0是完全透明的。1是完全可见和实心的(看不见通过) |
set_icon
设置显示在标题栏和任务栏上的图标。可以传递
- 一个文件名,对于Windows必须是.ICO图标文件
- 一个字节对象
- 一个存储在变量中的BASE64编码的文件
set_icon(icon=None, pngbase64=None)
参数说明
名称 | 含义 |
---|---|
icon | (str) 文件名或字节对象 |
pngbase64 | (str) BASE64编码的GIF或PNG文件 |
set_transparent_color
设置在窗口中将变得透明的颜色。具有此颜色的区域将是透明的。
set_transparent_color(color)
参数说明
名称 | 含义 |
---|---|
color | (str) 定义透明颜色的字符串 |
size
属性:size
返回窗口当前像素大小
名称 | 含义 |
---|---|
return | 元组[(int), (int)] 窗口的宽度(width)和高度(height) |
un_hide
用于使用 Hide 方法隐藏的窗口恢复显示
un_hide()
visibility_changed
这是一个完全无用的方法,它什么也不做。它在这里是为了让 PySimpleGUIQt 程序可以调用它,然后相同的源代码可以在普通的 PySimpleGUI 上运行。
visibility_changed()
名称 | 含义 |
---|---|
return |
函数参考
CButton(button_text,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
font=None,
bind_return_key=False,
disabled=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | 按钮图像像素大小 |
image_subsample | 减少图像大小的量 |
border_width | 元素周围的边框宽度 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
disabled | 为元素设置禁用状态(默认=False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
CalendarButton(button_text,
target=(None, None),
close_when_date_chosen=True,
default_date_m_d_y=(None, None, None),
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
tooltip=None,
border_width=None,
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
font=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
locale=None,
format=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
target | |
close_when_date_chosen | (默认 = True) |
default_date_m_d_y | (默认=(None)) |
None | |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | (默认=(None)) |
image_subsample | 减少图像大小的量 |
tooltip | (str) 鼠标悬停时出现的文本 |
border_width | 元素周围的边框宽度 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
locale | |
format | |
return | (Button) |
Cancel(button_text="Cancel",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
tooltip=None,
font=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='取消') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
CloseButton(button_text,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
font=None,
bind_return_key=False,
disabled=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | 按钮图像像素大小 |
image_subsample | 减少图像大小的量 |
border_width | 元素周围的边框宽度 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
disabled | 为元素设置禁用状态(默认=False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
ColorChooserButton(button_text,
target=(None, None),
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
tooltip=None,
border_width=None,
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
font=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
target | |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | (默认=(None)) |
image_subsample | 减少图像大小的量 |
tooltip | (str) 鼠标悬停时出现的文本 |
border_width | 元素周围的边框宽度 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
Debug(button_text="",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
font=None,
tooltip=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
font | 指定字体族、大小等 |
tooltip | (str) 鼠标悬停时出现的文本 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
DummyButton(button_text,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
font=None,
disabled=False,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | 按钮图像像素大小 |
image_subsample | 减少图像大小的量 |
border_width | 元素周围的边框宽度 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
font | 指定字体族、大小等 |
disabled | 为元素设置禁用状态(默认=False) |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
Exit(button_text="Exit",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
tooltip=None,
font=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='退出') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
FileBrowse(button_text="Browse",
target=(555666777, -1),
file_types=(('ALL Files', '*.*'),),
initial_folder=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
change_submits=False,
enable_events=False,
font=None,
disabled=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='浏览') |
target | 按钮的目标键或 (行,列)(默认值=(ThisRow, -1)) |
file_types | (默认值= (("ALL Files", "."))) |
initial_folder | 文件夹和文件的起始路径 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
change_submits | 如果为 True,则按 Enter 键提交窗口(默认=False) |
enable_events | 打开元素特定事件。(默认=False) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
disabled | 为元素设置禁用状态(默认=False) |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
FileSaveAs(button_text="Save As...",
target=(555666777, -1),
file_types=(('ALL Files', '*.*'),),
initial_folder=None,
disabled=False,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
change_submits=False,
enable_events=False,
font=None,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='另存为...') |
target | 按钮的目标键或 (行,列)(默认值=(ThisRow, -1)) |
file_types | (默认值= (("ALL Files", "."))) |
initial_folder | 文件夹和文件的起始路径 |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
change_submits | 如果为 True,则按 Enter 键提交窗口(默认=False) |
enable_events | 打开元素特定事件。(默认=False) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
允许浏览多个文件。文件列表作为单个列表返回,分隔符由变量 BROWSE_FILES_DELIMETER 定义。默认为 ';' 但可由用户更改
FilesBrowse(button_text="Browse",
target=(555666777, -1),
file_types=(('ALL Files', '*.*'),),
disabled=False,
initial_folder=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
change_submits=False,
enable_events=False,
font=None,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='浏览') |
target | 按钮的目标键或 (行,列)(默认值=(ThisRow, -1)) |
file_types | (默认值= (("ALL Files", "."))) |
disabled | 为元素设置禁用状态(默认=False) |
initial_folder | 文件夹和文件的起始路径 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
change_submits | 如果为 True,则按 Enter 键提交窗口(默认=False) |
enable_events | 打开元素特定事件。(默认=False) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
使用提供的值字典 { element_key : new_value } 填充窗口
FillFormWithValues(window, values_dict)
参数说明
名称 | 含义 |
---|---|
窗口 | (Window) 要填充的窗口对象 |
values_dict | (Dict[Any:Any]) 以元素键作为键,值作为值的字典,用于更新调用 |
FolderBrowse(button_text="Browse",
target=(555666777, -1),
initial_folder=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
change_submits=False,
enable_events=False,
font=None,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='浏览') |
target | 按钮的目标键或 (行,列)(默认值=(ThisRow, -1)) |
initial_folder | 文件夹和文件的起始路径 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
change_submits | 如果为 True,则按 Enter 键提交窗口(默认=False) |
enable_events | 打开元素特定事件。(默认=False) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
Help(button_text="Help",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
font=None,
tooltip=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '帮助') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
font | 指定字体族、大小等 |
tooltip | (str) 鼠标悬停时出现的文本 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
No(button_text="No",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
tooltip=None,
font=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '否') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
OK(button_text="OK",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
bind_return_key=True,
tooltip=None,
font=None,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '确定') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
bind_return_key | (默认 = True) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
以格式化的字符串形式输出对象的值。做得非常好。以人类形式显示对象的成员变量的绝佳方式
ObjToString(obj, extra=" ")
参数说明
名称 | 含义 |
---|---|
obj | (Any) 要显示的对象 |
extra | (默认值 = ' ') 返回 (str) 对象值的格式化输出 |
以格式化的字符串形式输出对象的值。做得非常好。以人类形式显示对象的成员变量的绝佳方式。仅返回最顶层对象的变量,而不是深入显示更多
ObjToStringSingleObj(obj)
参数说明
名称 | 含义 |
---|---|
obj | (Any) 要显示的对象 返回 (str) 对象值的格式化输出 |
Ok(button_text="Ok",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
bind_return_key=True,
tooltip=None,
font=None,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '确定') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
bind_return_key | (默认 = True) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
Open(button_text="Open",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
bind_return_key=True,
tooltip=None,
font=None,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '打开') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
bind_return_key | (默认 = True) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
Quit(button_text="Quit",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
tooltip=None,
font=None,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '退出') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
RButton(button_text,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
font=None,
bind_return_key=False,
disabled=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | 按钮图像像素大小 |
image_subsample | 减少图像大小的量 |
border_width | 元素周围的边框宽度 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
disabled | 为元素设置禁用状态(默认=False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
ReadButton(button_text,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
font=None,
bind_return_key=False,
disabled=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | 按钮图像像素大小 |
image_subsample | 减少图像大小的量 |
border_width | 元素周围的边框宽度 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
font | 指定字体族、大小等 |
bind_return_key | (默认 = False) |
disabled | 为元素设置禁用状态(默认=False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
RealtimeButton(button_text,
image_filename=None,
image_data=None,
image_size=(None, None),
image_subsample=None,
border_width=None,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
font=None,
disabled=False,
bind_return_key=False,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本 |
image_filename | 如果有按钮图像,则图像文件名 |
image_data | 要在按钮上显示的内存中的图像 |
image_size | 按钮图像像素大小 |
image_subsample | 减少图像大小的量 |
border_width | 元素周围的边框宽度 |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高(默认=(None)) |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
font | 指定字体族、大小等 |
disabled | 为元素设置禁用状态(默认=False) |
bind_return_key | (默认 = False) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
Save(button_text="Save",
size=(None, None),
auto_size_button=None,
button_color=None,
bind_return_key=True,
disabled=False,
tooltip=None,
font=None,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '保存') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
bind_return_key | (默认 = True) |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
SaveAs(button_text="Save As...",
target=(555666777, -1),
file_types=(('ALL Files', '*.*'),),
initial_folder=None,
disabled=False,
tooltip=None,
size=(None, None),
auto_size_button=None,
button_color=None,
change_submits=False,
enable_events=False,
font=None,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值='另存为...') |
target | 按钮的目标键或 (行,列)(默认值=(ThisRow, -1)) |
file_types | (默认值= (("ALL Files", "."))) |
initial_folder | 文件夹和文件的起始路径 |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
change_submits | 如果为 True,则按 Enter 键提交窗口(默认=False) |
enable_events | 打开元素特定事件。(默认=False) |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
显示包含用户提供的文本的滚动弹出窗口。使用尽可能多的项目打印,就像print语句一样。
ScrolledTextBox(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
yes_no=False,
auto_close=False,
auto_close_duration=None,
size=(None, None),
location=(None, None),
non_blocking=False,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
font=None)
参数说明
名称 | 含义 |
---|---|
*args | (Any) 要显示的变量数量的项 |
title | (str) 窗口要显示的标题。 |
button_color | Tuple[str, str] 按钮颜色(前景色,背景色) |
yes_no | (布尔值)如果为True,则显示Yes和No按钮而不是Ok |
auto_close | (布尔值)如果为True,窗口将自行关闭 |
auto_close_duration | Union[int, float] 旧版本仅接受int。窗口将在指定秒数后关闭 |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
location | Tuple[int, int] 屏幕上放置窗口左上角的位置 |
non_blocking | (bool) 如果为True,则调用将立即返回而不是等待用户输入 |
return | Union[str, None, TIMEOUT_KEY] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
设置在创建窗口时使用的图标,如果创建窗口时没有提供图标。
SetGlobalIcon(icon)
参数说明
名称 | 含义 |
---|---|
icon | Union[bytes, str] 基于Base64的字节字符串或文件名 |
SetOptions(icon=None,
button_color=None,
element_size=(None, None),
button_element_size=(None, None),
margins=(None, None),
element_padding=(None, None),
auto_size_text=None,
auto_size_buttons=None,
font=None,
border_width=None,
slider_border_width=None,
slider_relief=None,
slider_orientation=None,
autoclose_time=None,
message_box_line_width=None,
progress_meter_border_depth=None,
progress_meter_style=None,
progress_meter_relief=None,
progress_meter_color=None,
progress_meter_size=None,
text_justification=None,
background_color=None,
element_background_color=None,
text_element_background_color=None,
input_elements_background_color=None,
input_text_color=None,
scrollbar_color=None,
text_color=None,
element_text_color=None,
debug_win_size=(None, None),
window_location=(None, None),
error_button_color=(None, None),
tooltip_time=None,
use_ttk_buttons=None,
ttk_theme=None)
参数说明
名称 | 含义 |
---|---|
icon | 用于任务栏和标题栏的图标的文件名 |
button_color | 按钮颜色(前景色,背景色) |
element_size | Tuple[int, int] 元素大小(宽度,高度)以字符为单位 |
button_element_size | Tuple[int, int] |
边距 | tkinter围绕外部的边距(默认 = (None)) |
element_padding | (默认=(None)) |
auto_size_text | True如果大小应该适应文本长度 |
auto_size_buttons | |
font | 指定字体族、大小等 |
border_width | 元素周围的边框宽度 |
slider_border_width | |
slider_relief | |
slider_orientation | |
autoclose_time | |
message_box_line_width | |
progress_meter_border_depth | |
progress_meter_style | |
progress_meter_relief | |
progress_meter_color | |
progress_meter_size | Tuple[int, int] |
文本对齐 | |
background_color | 背景颜色 |
element_background_color | |
text_element_background_color | |
input_elements_background_color | |
input_text_color | |
scrollbar_color | |
text_color | 文本颜色 |
element_text_color | |
debug_win_size | Tuple[int, int] (默认 = (None)) |
window_location | (默认=(None)) |
error_button_color | (默认=(None)) |
tooltip_time | 在显示工具提示之前等待的毫秒数。默认为400ms |
use_ttk_buttons | (bool) 如果为True,则导致所有按钮都成为 ttk 按钮 |
ttk主题 | (str) 与 ttk 小部件一起使用的主题。选择项(在Windows上)包括 - 'default', 'winnative', 'clam', 'alt', 'classic', 'vista', 'xpnative' |
Submit(button_text="Submit",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
bind_return_key=True,
tooltip=None,
font=None,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '提交') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
bind_return_key | (默认 = True) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
Yes(button_text="Yes",
size=(None, None),
auto_size_button=None,
button_color=None,
disabled=False,
tooltip=None,
font=None,
bind_return_key=True,
focus=False,
pad=None,
key=None,
metadata=None)
参数说明
名称 | 含义 |
---|---|
button_text | 按钮中的文本(默认值 = '是') |
size | (w,h) w=字符宽,h=行高 |
auto_size_button | 如果按钮大小由按钮文本决定(默认=True) |
button_color | 按钮颜色(前景色,背景色) |
disabled | 为元素设置禁用状态(默认=False) |
tooltip | (str) 鼠标悬停时出现的文本 |
font | 指定字体族、大小等 |
bind_return_key | (默认 = True) |
focus | 如果应将焦点设置到此 |
pad | 元素周围的填充量 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
return | (Button) |
调试窗口输出
easy_print(args,
size=(None, None),
end=None,
sep=None,
location=(None, None),
font=None,
no_titlebar=False,
no_button=False,
grab_anywhere=False,
keep_on_top=False,
do_not_reroute_stdout=True,
text_color=None,
background_color=None)
参数说明
名称 | 含义 |
---|---|
*args | |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
end | |
sep | |
location | 要在屏幕上显示的位置 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
no_button | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
do_not_reroute_stdout | (默认 = True) |
easy_print_close()
eprint(args,
size=(None, None),
end=None,
sep=None,
location=(None, None),
font=None,
no_titlebar=False,
no_button=False,
grab_anywhere=False,
keep_on_top=False,
do_not_reroute_stdout=True,
text_color=None,
background_color=None)
参数说明
名称 | 含义 |
---|---|
*args | |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
end | |
sep | |
location | 要在屏幕上显示的位置 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
no_button | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
do_not_reroute_stdout | (默认 = True) |
sgprint(args,
size=(None, None),
end=None,
sep=None,
location=(None, None),
font=None,
no_titlebar=False,
no_button=False,
grab_anywhere=False,
keep_on_top=False,
do_not_reroute_stdout=True,
text_color=None,
background_color=None)
参数说明
名称 | 含义 |
---|---|
*args | |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
end | |
sep | |
location | 要在屏幕上显示的位置 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
no_button | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
do_not_reroute_stdout | (默认 = True) |
sgprint_close()
EasyPrint(args,
size=(None, None),
end=None,
sep=None,
location=(None, None),
font=None,
no_titlebar=False,
no_button=False,
grab_anywhere=False,
keep_on_top=False,
do_not_reroute_stdout=True,
text_color=None,
background_color=None)
参数说明
名称 | 含义 |
---|---|
*args | |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
end | |
sep | |
location | 要在屏幕上显示的位置 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
no_button | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
do_not_reroute_stdout | (默认 = True) |
EasyPrintClose()
Print(args,
size=(None, None),
end=None,
sep=None,
location=(None, None),
font=None,
no_titlebar=False,
no_button=False,
grab_anywhere=False,
keep_on_top=False,
do_not_reroute_stdout=True,
text_color=None,
background_color=None)
参数说明
名称 | 含义 |
---|---|
*args | |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
end | |
sep | |
location | 要在屏幕上显示的位置 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
no_button | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
do_not_reroute_stdout | (默认 = True) |
PrintClose()
OneLineProgressMeter
OneLineProgressMeter(title,
current_value,
max_value,
key,
args,
orientation="v",
bar_color=(None, None),
button_color=None,
size=(20, 20),
border_width=None,
grab_anywhere=False)
参数说明
名称 | 含义 |
---|---|
title | 要显示的文本 |
current_value | 当前进度条值 |
最大值 | 进度条的最大值 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
*args | 要输出的内容。 |
方向 | 'horizontal' 或 'vertical' ('h' 或 'v' 也行)(默认值 = 'vertical')(默认值 = 'v') |
条形色 | |
button_color | 按钮颜色(前景色,背景色) |
size | Tuple[int, int] (w,h) w=字符宽,h=行高(默认值 = DEFAULT_PROGRESS_BAR_SIZE) |
border_width | 元素周围的边框宽度 |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
return | (bool) 如果成功更新则为True。如果用户通过X或取消按钮关闭了计尺器则为False |
取消并关闭先前创建的 One Line Progress Meter 窗口
OneLineProgressMeterCancel(key)
参数说明
名称 | 含义 |
---|---|
键 | 创建计尺器时使用的键 |
one_line_progress_meter(title,
current_value,
max_value,
key,
args,
orientation="v",
bar_color=(None, None),
button_color=None,
size=(20, 20),
border_width=None,
grab_anywhere=False)
参数说明
名称 | 含义 |
---|---|
title | 要显示的文本 |
current_value | 当前进度条值 |
最大值 | 进度条的最大值 |
键 | 与 window.FindElement 和与返回值一起使用,以唯一标识此元素 |
*args | 要输出的内容。 |
方向 | 'horizontal' 或 'vertical' ('h' 或 'v' 也行)(默认值 = 'vertical')(默认值 = 'v') |
条形色 | |
button_color | 按钮颜色(前景色,背景色) |
size | Tuple[int, int] (w,h) w=字符宽,h=行高(默认值 = DEFAULT_PROGRESS_BAR_SIZE) |
border_width | 元素周围的边框宽度 |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
return | (bool) 如果成功更新则为True。如果用户通过X或取消按钮关闭了计尺器则为False |
取消并关闭先前创建的 One Line Progress Meter 窗口
one_line_progress_meter_cancel(key)
参数说明
名称 | 含义 |
---|---|
键 | 创建计尺器时使用的键 |
弹出功能
Popup - 显示包含您希望包含的参数数量的弹窗窗口。这是GUI中的“print”语句的等价物。它也非常适合“暂停”程序流程,直到用户可以阅读一些错误消息。
Popup(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
button_type=0,
auto_close=False,
auto_close_duration=None,
custom_text=(None, None),
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | (任何)变量数量的您的参数。用东西填充调用,看看效果! |
title | (字符串)窗口的可选标题。如果没有提供,则将使用第一个参数。 |
button_color | 元组[str, str] 显示的按钮颜色(文字颜色,按钮颜色) |
background_color | (字符串)窗口的背景颜色 |
text_color | (字符串)文字颜色 |
button_type | (枚举)非用户设置!确定哪些预定义按钮将被显示(默认值 = POPUP_BUTTONS_OK)。有许多弹出功能,它们调用弹出,通过更改此参数以获得所需效果。 |
auto_close | (布尔值)如果为True,则窗口将自动关闭 |
auto_close_duration | (整数)在自动关闭窗口之前保持窗口开启的时间(秒) |
custom_text | Union[Tuple[str, str], str] 要显示在按钮上的文本字符串或字符串对 |
non_blocking | (布尔值)如果为True,则立即从函数返回,而无需等待用户输入。 |
icon | Union[str, bytes] 要在窗口上显示的图标。格式与Window调用相同 |
line_width | (整数)字符宽度。默认为MESSAGE_BOX_LINE_WIDTH |
font | Union[str, tuple(font name, size, modifiers)] 指定字体家族、大小等 |
no_titlebar | (布尔值)如果为True,则不会显示窗口周围的框架和顶部的标题栏 |
grab_anywhere | (布尔值)如果为True,则可以从任何地方抓取以移动窗口。如果no_titlebar为True,则应启用grab_anywhere |
location | Tuple[int, int] 显示窗口左上角屏幕上的位置。默认为窗口居中于屏幕 |
return | Union[str, None] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
一次显示一帧动画。此函数有自己的内部时钟,这意味着您可以以任何频率调用它,视频帧显示的速率将保持恒定。也许您的帧每30毫秒更新一次,但您的事件循环每10毫秒运行一次。您不必担心延迟,只需在循环中每次都调用它即可。
PopupAnimated(image_source,
message=None,
background_color=None,
text_color=None,
font=None,
no_titlebar=True,
grab_anywhere=True,
keep_on_top=True,
location=(None, None),
alpha_channel=None,
time_between_frames=0,
transparent_color=None)
参数说明
名称 | 含义 |
---|---|
image_source | Union[str, bytes] 可以是文件名或base64字符串。 |
message | (str) 可选的消息,将与动画一起显示 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, tuple) 指定字体家族、大小等 |
no_titlebar | (bool) 如果为True,则标题栏和窗口框架将不会显示 |
grab_anywhere | (bool) 如果为True,则可以通过单击窗口的任何位置并拖动来移动窗口 |
keep_on_top | (bool) 如果为True,则窗口将始终保持在当前显示的所有其他窗口之上 |
location | (int, int) (x,y) 屏幕上的位置,用于放置窗口的左上角。默认为中心屏幕 |
alpha_channel | (float) 窗口透明度 0 = 不可见 1 = 完全可见。介于两者之间的值是透明的 |
time_between_frames | (int) 每帧之间的时间(毫秒) |
transparent_color | (str) 此颜色将在窗口中完全透明。甚至可以点击通过 |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
PopupAnnoying(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
在一段时间后关闭自己的弹出
PopupAutoClose(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示带有“已取消”按钮文本的弹出
PopupCancel(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
带有彩色按钮和“错误”作为按钮文本的弹出
PopupError(args,
title=None,
button_color=(None, None),
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location | (默认=(None)) |
显示带有文本输入字段和浏览按钮的弹出窗口,以便用户可以选择文件。
PopupGetFile(message,
title=None,
default_path="",
default_extension="",
save_as=False,
multiple_files=False,
file_types=(('ALL Files', '*.*'),),
no_window=False,
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None),
initial_folder=None)
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_path | (str) 显示给用户的路径作为起点(填充到输入字段中) |
default_extension | (str) 如果用户未输入扩展名,则将其添加到文件名中(仅在保存对话框中使用) |
save_as | (bool) 如果为真,则显示“另存为”对话框,在覆盖之前会进行验证 |
multiple_files | (bool) 如果为真,则允许选择多个文件,这些文件将使用分号(;)分隔并返回 |
file_types | Tuple[Tuple[str,str]] 使用通配符显示的扩展名列表。所有文件(默认)= (("ALL Files", "."),) |
no_window | (bool) 如果为真,则不会显示PySimpleGUI窗口。相反,只显示tkinter对话框 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
initial_folder | (str) 文件系统中的起始浏览位置 |
return | Union[str, None] 表示选择的文件(s)的字符串,如果取消或通过X关闭窗口,则为None |
显示带有文本输入字段和浏览按钮的弹出窗口,以便可以选择文件夹。
PopupGetFolder(message,
title=None,
default_path="",
no_window=False,
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None),
initial_folder=None)
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_path | (str) 显示给用户的路径作为起点(填充到输入字段中) |
no_window | (bool) 如果为真,则不会显示PySimpleGUI窗口。相反,只显示tkinter对话框 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
initial_folder | (str) 文件系统中的起始浏览位置 |
return | Union[str, None] 表示选择的路径的字符串,如果取消或窗口通过X关闭则为None。 |
显示带有文本输入字段的弹出窗口。返回输入的文本或None(如果关闭/取消)
PopupGetText(message,
title=None,
default_text="",
password_char="",
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_text | (str) 放入输入区域的默认值 |
password_char | (str) 显示为实际输入字符的字符 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
return | Union[str, None] 输入的文本或None(如果窗口关闭或点击了取消按钮) |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
PopupNoBorder(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
显示没有按钮的弹出
PopupNoButtons(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
PopupNoFrame(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
PopupNoTitlebar(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
显示弹出窗口并立即返回(不阻塞)
PopupNoWait(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示弹出窗口并立即返回(不阻塞)
PopupNonBlocking(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
仅显示带有OK按钮的弹出
PopupOK(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示带有OK和取消按钮的弹出
PopupOKCancel(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=...,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location | 要在屏幕上显示的位置 |
return | Union["OK", "Cancel", None] |
显示不阻塞并自行关闭的弹出框
PopupQuick(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=2,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | (默认值 = 2) |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示没有标题栏、不阻塞并自动关闭的弹出窗口。
PopupQuickMessage(args,
title=None,
button_type=5,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=2,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=True,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_NO_BUTTONS) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | (默认值 = 2) |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = True) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示包含用户提供的文本的滚动弹出窗口。使用尽可能多的项目打印,就像print语句一样。
PopupScrolled(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
yes_no=False,
auto_close=False,
auto_close_duration=None,
size=(None, None),
location=(None, None),
non_blocking=False,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
font=None)
参数说明
名称 | 含义 |
---|---|
*args | (Any) 要显示的变量数量的项 |
title | (str) 窗口要显示的标题。 |
button_color | Tuple[str, str] 按钮颜色(前景色,背景色) |
yes_no | (布尔值)如果为True,则显示Yes和No按钮而不是Ok |
auto_close | (布尔值)如果为True,窗口将自行关闭 |
auto_close_duration | Union[int, float] 旧版本仅接受int。窗口将在指定秒数后关闭 |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
location | Tuple[int, int] 屏幕上放置窗口左上角的位置 |
non_blocking | (bool) 如果为True,则调用将立即返回而不是等待用户输入 |
return | Union[str, None, TIMEOUT_KEY] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
在一段时间后关闭自己的弹出
PopupTimed(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示带有是和否按钮的弹出
PopupYesNo(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location | 要在屏幕上显示的位置 |
return | Union["Yes", "No", None] |
弹出 PEP8 版本
Popup - 显示包含您希望包含的参数数量的弹窗窗口。这是GUI中的“print”语句的等价物。它也非常适合“暂停”程序流程,直到用户可以阅读一些错误消息。
popup(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
button_type=0,
auto_close=False,
auto_close_duration=None,
custom_text=(None, None),
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | (任何)变量数量的您的参数。用东西填充调用,看看效果! |
title | (字符串)窗口的可选标题。如果没有提供,则将使用第一个参数。 |
button_color | 元组[str, str] 显示的按钮颜色(文字颜色,按钮颜色) |
background_color | (字符串)窗口的背景颜色 |
text_color | (字符串)文字颜色 |
button_type | (枚举)非用户设置!确定哪些预定义按钮将被显示(默认值 = POPUP_BUTTONS_OK)。有许多弹出功能,它们调用弹出,通过更改此参数以获得所需效果。 |
auto_close | (布尔值)如果为True,则窗口将自动关闭 |
auto_close_duration | (整数)在自动关闭窗口之前保持窗口开启的时间(秒) |
custom_text | Union[Tuple[str, str], str] 要显示在按钮上的文本字符串或字符串对 |
non_blocking | (布尔值)如果为True,则立即从函数返回,而无需等待用户输入。 |
icon | Union[str, bytes] 要在窗口上显示的图标。格式与Window调用相同 |
line_width | (整数)字符宽度。默认为MESSAGE_BOX_LINE_WIDTH |
font | Union[str, tuple(font name, size, modifiers)] 指定字体家族、大小等 |
no_titlebar | (布尔值)如果为True,则不会显示窗口周围的框架和顶部的标题栏 |
grab_anywhere | (布尔值)如果为True,则可以从任何地方抓取以移动窗口。如果no_titlebar为True,则应启用grab_anywhere |
location | Tuple[int, int] 显示窗口左上角屏幕上的位置。默认为窗口居中于屏幕 |
return | Union[str, None] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
一次显示一帧动画。此函数有自己的内部时钟,这意味着您可以以任何频率调用它,视频帧显示的速率将保持恒定。也许您的帧每30毫秒更新一次,但您的事件循环每10毫秒运行一次。您不必担心延迟,只需在循环中每次都调用它即可。
popup_animated(image_source,
message=None,
background_color=None,
text_color=None,
font=None,
no_titlebar=True,
grab_anywhere=True,
keep_on_top=True,
location=(None, None),
alpha_channel=None,
time_between_frames=0,
transparent_color=None)
参数说明
名称 | 含义 |
---|---|
image_source | Union[str, bytes] 可以是文件名或base64字符串。 |
message | (str) 可选的消息,将与动画一起显示 |
background_color | (str) 背景颜色 |
text_color | (str) 文本颜色 |
font | Union[str, tuple) 指定字体家族、大小等 |
no_titlebar | (bool) 如果为True,则标题栏和窗口框架将不会显示 |
grab_anywhere | (bool) 如果为True,则可以通过单击窗口的任何位置并拖动来移动窗口 |
keep_on_top | (bool) 如果为True,则窗口将始终保持在当前显示的所有其他窗口之上 |
location | (int, int) (x,y) 屏幕上的位置,用于放置窗口的左上角。默认为中心屏幕 |
alpha_channel | (float) 窗口透明度 0 = 不可见 1 = 完全可见。介于两者之间的值是透明的 |
time_between_frames | (int) 每帧之间的时间(毫秒) |
transparent_color | (str) 此颜色将在窗口中完全透明。甚至可以点击通过 |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
popup_annoying(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
在一段时间后关闭自己的弹出
popup_auto_close(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示带有“已取消”按钮文本的弹出
popup_cancel(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
带有彩色按钮和“错误”作为按钮文本的弹出
popup_error(args,
title=None,
button_color=(None, None),
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location | (默认=(None)) |
显示带有文本输入字段和浏览按钮的弹出窗口,以便用户可以选择文件。
popup_get_file(message,
title=None,
default_path="",
default_extension="",
save_as=False,
multiple_files=False,
file_types=(('ALL Files', '*.*'),),
no_window=False,
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None),
initial_folder=None)
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_path | (str) 显示给用户的路径作为起点(填充到输入字段中) |
default_extension | (str) 如果用户未输入扩展名,则将其添加到文件名中(仅在保存对话框中使用) |
save_as | (bool) 如果为真,则显示“另存为”对话框,在覆盖之前会进行验证 |
multiple_files | (bool) 如果为真,则允许选择多个文件,这些文件将使用分号(;)分隔并返回 |
file_types | Tuple[Tuple[str,str]] 使用通配符显示的扩展名列表。所有文件(默认)= (("ALL Files", "."),) |
no_window | (bool) 如果为真,则不会显示PySimpleGUI窗口。相反,只显示tkinter对话框 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
initial_folder | (str) 文件系统中的起始浏览位置 |
return | Union[str, None] 表示选择的文件(s)的字符串,如果取消或通过X关闭窗口,则为None |
显示带有文本输入字段和浏览按钮的弹出窗口,以便可以选择文件夹。
popup_get_folder(message,
title=None,
default_path="",
no_window=False,
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None),
initial_folder=None)
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_path | (str) 显示给用户的路径作为起点(填充到输入字段中) |
no_window | (bool) 如果为真,则不会显示PySimpleGUI窗口。相反,只显示tkinter对话框 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
initial_folder | (str) 文件系统中的起始浏览位置 |
return | Union[str, None] 表示选择的路径的字符串,如果取消或窗口通过X关闭则为None。 |
显示带有文本输入字段的弹出窗口。返回输入的文本或None(如果关闭/取消)
popup_get_text(message,
title=None,
default_text="",
password_char="",
size=(None, None),
button_color=None,
background_color=None,
text_color=None,
icon=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
message | (str) 显示给用户的消息 |
title | (str) 窗口标题 |
default_text | (str) 放入输入区域的默认值 |
password_char | (str) 显示为实际输入字符的字符 |
size | Tuple[int, int] (width, height) of the InputText Element |
button_color | Tuple[str, str] Button的(文本,背景)颜色 |
background_color | (str) 整个窗口的背景颜色 |
text_color | (str) 消息文本的颜色 |
icon | Union[bytes, str] filename or base64 string to be used for the window's icon |
font | Union[str, Tuple[str, int]] specifies the font family, size, etc |
no_titlebar | (bool) 如果为真,则不会显示标题栏 |
grab_anywhere | (bool) 如果为真,则可以在窗口的任何地方单击并拖动来移动窗口 |
keep_on_top | (bool) 如果为真,窗口将保持在所有当前窗口之上 |
location | Tuyple[int, int] (x,y) 窗口左上角在屏幕上的位置 |
return | Union[str, None] 输入的文本或None(如果窗口关闭或点击了取消按钮) |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
popup_no_border(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
显示没有按钮的弹出
popup_no_buttons(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
popup_no_frame(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
显示没有标题栏的弹出。启用抓取任何地方,因此您可以移动它
popup_no_titlebar(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
grab_anywhere=True,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
grab_anywhere | (默认 = True) |
location |
显示弹出窗口并立即返回(不阻塞)
popup_no_wait(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示弹出窗口并立即返回(不阻塞)
popup_non_blocking(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
仅显示带有OK按钮的弹出
popup_ok(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示带有OK和取消按钮的弹出
popup_ok_cancel(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=...,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location | 要在屏幕上显示的位置 |
return | Union["OK", "Cancel", None] |
显示不阻塞并自行关闭的弹出框
popup_quick(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=2,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | (默认值 = 2) |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示没有标题栏、不阻塞并自动关闭的弹出窗口。
popup_quick_message(args,
title=None,
button_type=5,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=2,
non_blocking=True,
icon=None,
line_width=None,
font=None,
no_titlebar=True,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_NO_BUTTONS) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | (默认值 = 2) |
non_blocking | (默认 = True) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = True) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示包含用户提供的文本的滚动弹出窗口。使用尽可能多的项目打印,就像print语句一样。
popup_scrolled(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
yes_no=False,
auto_close=False,
auto_close_duration=None,
size=(None, None),
location=(None, None),
non_blocking=False,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
font=None)
参数说明
名称 | 含义 |
---|---|
*args | (Any) 要显示的变量数量的项 |
title | (str) 窗口要显示的标题。 |
button_color | Tuple[str, str] 按钮颜色(前景色,背景色) |
yes_no | (布尔值)如果为True,则显示Yes和No按钮而不是Ok |
auto_close | (布尔值)如果为True,窗口将自行关闭 |
auto_close_duration | Union[int, float] 旧版本仅接受int。窗口将在指定秒数后关闭 |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
location | Tuple[int, int] 屏幕上放置窗口左上角的位置 |
non_blocking | (bool) 如果为True,则调用将立即返回而不是等待用户输入 |
return | Union[str, None, TIMEOUT_KEY] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
在一段时间后关闭自己的弹出
popup_timed(args,
title=None,
button_type=0,
button_color=None,
background_color=None,
text_color=None,
auto_close=True,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_type | (默认值 = POPUP_BUTTONS_OK) |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = True) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location |
显示带有是和否按钮的弹出
popup_yes_no(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
auto_close=False,
auto_close_duration=None,
non_blocking=False,
icon=None,
line_width=None,
font=None,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
location=(None, None))
参数说明
名称 | 含义 |
---|---|
*args | |
title | |
button_color | 按钮颜色(前景色,背景色) |
background_color | 背景颜色 |
text_color | 文本颜色 |
auto_close | (默认 = False) |
auto_close_duration | |
non_blocking | (默认 = False) |
icon | 要显示的图标 |
line_width | 字符宽度的行宽度 |
font | 指定字体族、大小等 |
no_titlebar | (默认 = False) |
grab_anywhere | 如果为真,可以抓取任何地方来移动窗口(默认为假) |
location | 要在屏幕上显示的位置 |
return | Union["Yes", "No", None] |
PEP8 函数绑定
使用提供的值字典 { element_key : new_value } 填充窗口
fill_form_with_values(window, values_dict)
参数说明
名称 | 含义 |
---|---|
窗口 | (Window) 要填充的窗口对象 |
values_dict | (Dict[Any:Any]) 以元素键作为键,值作为值的字典,用于更新调用 |
PySimpleGUI的"测试工具"。这是一个对元素的超快速测试。
main()
以格式化的字符串形式输出对象的值。做得非常好。以人类形式显示对象的成员变量的绝佳方式
obj_to_string(obj, extra=" ")
参数说明
名称 | 含义 |
---|---|
obj | (Any) 要显示的对象 |
extra | (默认值 = ' ') 返回 (str) 对象值的格式化输出 |
以格式化的字符串形式输出对象的值。做得非常好。以人类形式显示对象的成员变量的绝佳方式。仅返回最顶层对象的变量,而不是深入显示更多
obj_to_string_single_obj(obj)
参数说明
名称 | 含义 |
---|---|
obj | (Any) 要显示的对象 返回 (str) 对象值的格式化输出 |
设置在创建窗口时使用的图标,如果创建窗口时没有提供图标。
set_global_icon(icon)
参数说明
名称 | 含义 |
---|---|
icon | Union[bytes, str] 基于Base64的字节字符串或文件名 |
set_options(icon=None,
button_color=None,
element_size=(None, None),
button_element_size=(None, None),
margins=(None, None),
element_padding=(None, None),
auto_size_text=None,
auto_size_buttons=None,
font=None,
border_width=None,
slider_border_width=None,
slider_relief=None,
slider_orientation=None,
autoclose_time=None,
message_box_line_width=None,
progress_meter_border_depth=None,
progress_meter_style=None,
progress_meter_relief=None,
progress_meter_color=None,
progress_meter_size=None,
text_justification=None,
background_color=None,
element_background_color=None,
text_element_background_color=None,
input_elements_background_color=None,
input_text_color=None,
scrollbar_color=None,
text_color=None,
element_text_color=None,
debug_win_size=(None, None),
window_location=(None, None),
error_button_color=(None, None),
tooltip_time=None,
use_ttk_buttons=None,
ttk_theme=None)
参数说明
名称 | 含义 |
---|---|
icon | 用于任务栏和标题栏的图标的文件名 |
button_color | 按钮颜色(前景色,背景色) |
element_size | Tuple[int, int] 元素大小(宽度,高度)以字符为单位 |
button_element_size | Tuple[int, int] |
边距 | tkinter围绕外部的边距(默认 = (None)) |
element_padding | (默认=(None)) |
auto_size_text | True如果大小应该适应文本长度 |
auto_size_buttons | |
font | 指定字体族、大小等 |
border_width | 元素周围的边框宽度 |
slider_border_width | |
slider_relief | |
slider_orientation | |
autoclose_time | |
message_box_line_width | |
progress_meter_border_depth | |
progress_meter_style | |
progress_meter_relief | |
progress_meter_color | |
progress_meter_size | Tuple[int, int] |
文本对齐 | |
background_color | 背景颜色 |
element_background_color | |
text_element_background_color | |
input_elements_background_color | |
input_text_color | |
scrollbar_color | |
text_color | 文本颜色 |
element_text_color | |
debug_win_size | Tuple[int, int] (默认 = (None)) |
window_location | (默认=(None)) |
error_button_color | (默认=(None)) |
tooltip_time | 在显示工具提示之前等待的毫秒数。默认为400ms |
use_ttk_buttons | (bool) 如果为True,则导致所有按钮都成为 ttk 按钮 |
ttk主题 | (str) 与 ttk 小部件一起使用的主题。选择项(在Windows上)包括 - 'default', 'winnative', 'clam', 'alt', 'classic', 'vista', 'xpnative' |
显示较小的"弹出"窗口。默认位置是屏幕的右上角
show_debugger_popout_window(location=(None, None), args)
参数说明
名称 | 含义 |
---|---|
location | 屏幕上的位置元组[int, int] (x,y) 以放置窗口的左上角 |
*args | 未使用 |
显示大型的主调试窗口
show_debugger_window(location=(None, None), args)
参数说明
名称 | 含义 |
---|---|
location | 屏幕上的位置元组[int, int] (x,y) 以放置窗口的左上角 |
*args | 未使用 |
显示包含用户提供的文本的滚动弹出窗口。使用尽可能多的项目打印,就像print语句一样。
sprint(args,
title=None,
button_color=None,
background_color=None,
text_color=None,
yes_no=False,
auto_close=False,
auto_close_duration=None,
size=(None, None),
location=(None, None),
non_blocking=False,
no_titlebar=False,
grab_anywhere=False,
keep_on_top=False,
font=None)
参数说明
名称 | 含义 |
---|---|
*args | (Any) 要显示的变量数量的项 |
title | (str) 窗口要显示的标题。 |
button_color | Tuple[str, str] 按钮颜色(前景色,背景色) |
yes_no | (布尔值)如果为True,则显示Yes和No按钮而不是Ok |
auto_close | (布尔值)如果为True,窗口将自行关闭 |
auto_close_duration | Union[int, float] 旧版本仅接受int。窗口将在指定秒数后关闭 |
size | Tuple[int, int] (w,h) w=字符宽度,h=行数 |
location | Tuple[int, int] 屏幕上放置窗口左上角的位置 |
non_blocking | (bool) 如果为True,则调用将立即返回而不是等待用户输入 |
return | Union[str, None, TIMEOUT_KEY] 返回被按下的按钮文本。如果用户通过X关闭窗口,则返回None |
PySimpleGUI的"测试工具"。这是一个对元素的超快速测试。
test()
主题
设置/获取当前主题。如果没有指定,则返回当前主题。此调用替换了ChangeLookAndFeel / change_look_and_feel调用,该调用仅设置主题。
theme(new_theme=None)
参数说明
名称 | 含义 |
---|---|
new_theme | (str) 要使用的新的主题名称 |
return | (str) 当前选定的主题 |
设置/返回当前正在使用的背景颜色。用于Windows和容器(列、框架、标签)以及表格
theme_background_color(color=None) -> (str) - color string of the background color currently in use
设置/返回当前正在使用的边框宽度。目前由非 ttk 元素使用
theme_border_width(border_width=None) -> (int) - border width currently in use
设置/返回当前正在使用的按钮颜色
theme_button_color(color=None) -> Tuple[str, str] - TUPLE with color strings of the button color currently in use (button text color, button background color)
设置/返回除容器之外的所有元素当前正在使用的背景颜色
theme_element_background_color(color=None) -> (str) - color string of the element background color currently in use
设置/返回具有文本显示的元素使用的文本颜色(表格、树和滑块)
theme_element_text_color(color=None) -> (str) - color string currently in use
设置/返回输入元素当前正在使用的背景颜色
theme_input_background_color(color=None) -> (str) - color string of the input element background color currently in use
设置/返回输入元素条目颜色(不是文本,而是显示文本的东西)
theme_input_text_color(color=None) -> (str) - color string of the input element color currently in use
返回当前可用颜色主题的排序列表
theme_list() -> List[str] - A sorted list of the currently available color themes
显示包含所有颜色主题的窗口 - 需要一段时间,请耐心等待
theme_previewer(columns=12)
参数说明
名称 | 含义 |
---|---|
columns | (int) 单行中主题的数量 |
设置/返回当前正在使用的进度条边框宽度
theme_progress_bar_border_width(border_width=None) -> (int) - border width currently in use
设置/返回由当前颜色主题指定的进度条颜色
theme_progress_bar_color(color=None) -> Tuple[str, str] - TUPLE with color strings of the ProgressBar color currently in use(button text color, button background color)
设置/返回当前正在使用的滑块边框宽度
theme_slider_border_width(border_width=None) -> (int) - border width currently in use
设置/返回滑块颜色(用于滑块)
theme_slider_color(color=None) -> (str) - color string of the slider color currently in use
设置/返回当前正在使用的文本颜色
theme_text_color(color=None) -> (str) - color string of the text color currently in use
设置/返回文本元素的背景颜色
theme_text_element_background_color(color=None) -> (str) - color string of the text background color currently in use
旧主题(外观和感觉) - 被theme()取代
更改所有未来PySimpleGUI窗口的"颜色方案"。方案是字符串名称,指定了一组颜色。背景颜色、文本颜色、按钮颜色。使用单个ChangeLookAndFeel调用可以同时更改13种不同的颜色设置。外观和感觉表本身具有LOOK_AND_FEEL_TABLE字典中的这些索引。原始列表(在重大重构和重命名之前)...这些名称仍然有效...2019年11月制定了一种新的主题公式,使选择主题更容易:公式是:["Dark"或"Light"] 颜色编号 颜色可以是蓝色、棕色、灰色、绿色、紫色、红色、蓝绿色、黄色、黑色。每个对的数量会不同。例如,DarkGrey的条目比LightYellow多。默认值 = 默认设置(只有按钮颜色与系统默认不同)Default1 = 完全系统默认包括按钮(一切都是灰色...多么悲哀...请不要全都是灰色...)
ChangeLookAndFeel(index, force=False)
参数说明
名称 | 含义 |
---|---|
index | (str) Look and Feel表的索引名称(不必完全准确,可以是"模糊的") |
强制 | (bool) 不再使用 |
获取传递给change_look_and_feel调用的有效值列表
ListOfLookAndFeelValues() -> List[str] - list of valid string values
显示一个"快速参考窗口",显示所有可用的外观和感觉设置。它们按字母顺序排序。遗留的颜色名称混合在其中,但其他方面它们被分为暗部和亮部两部分
preview_all_look_and_feel_themes(columns=12)
参数说明
名称 | 含义 |
---|---|
columns | (int) 每行显示的主题数量 |
获取传递给change_look_and_feel调用的有效值列表
list_of_look_and_feel_values() -> List[str] - list of valid string values
更改所有未来PySimpleGUI窗口的"颜色方案"。方案是字符串名称,指定了一组颜色。背景颜色、文本颜色、按钮颜色。使用单个ChangeLookAndFeel调用可以同时更改13种不同的颜色设置。外观和感觉表本身具有LOOK_AND_FEEL_TABLE字典中的这些索引。原始列表(在重大重构和重命名之前)...这些名称仍然有效...2019年11月制定了一种新的主题公式,使选择主题更容易:公式是:["Dark"或"Light"] 颜色编号 颜色可以是蓝色、棕色、灰色、绿色、紫色、红色、蓝绿色、黄色、黑色。每个对的数量会不同。例如,DarkGrey的条目比LightYellow多。默认值 = 默认设置(只有按钮颜色与系统默认不同)Default1 = 完全系统默认包括按钮(一切都是灰色...多么悲哀...请不要全都是灰色...)
change_look_and_feel(index, force=False)
参数说明
名称 | 含义 |
---|---|
index | (str) Look and Feel表的索引名称(不必完全准确,可以是"模糊的") |
强制 | (bool) 不再使用 |
"演示程序"应用程序
太多,无法一一列出!!
有超过170个示例程序可以帮助您快速入门。
这些程序是PySimpleGUI整体文档和学习系统的一部分。它们将帮助您从中学到并理解。它们还展示了与其他已为您解决的其他包的集成技术。
您将在GitHub顶层及其每个PySimpleGUI端口下的子文件夹"演示程序"中找到演示程序。
PySimpleGUI(tkinter)的示例程序:https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms
PySimpleGUIQt的示例程序:https://github.com/PySimpleGUI/PySimpleGUI/tree/master/PySimpleGUIQt/Demo%20Programs
PySimpleGUIWx的示例程序:https://github.com/PySimpleGUI/PySimpleGUI/tree/master/PySimpleGUIWx/Demo%20Programs
PySimpleGUIWeb的示例程序:https://github.com/PySimpleGUI/PySimpleGUI/tree/master/PySimpleGUIWeb/Demo%20Programs
每个端口文件夹下的程序并不多,因为主要示例程序应该在所有其他平台上以最小的改动运行(通常只有导入语句更改)。
您还可以在Trinket上找到许多运行示例 http://Trinket.PySimpleGUI.org
示例程序中使用的包
虽然PySimpleGUI的核心代码没有使用任何第三方包,但一些示例程序确实使用了。它们为一些流行的包添加了GUI。这些包包括
- Chatterbot
- Mido
- Matplotlib
- PyMuPDF
- OpenCV
- pymunk
- psutil
- pygame
- Forecastio
创建Windows .EXE文件
您可以为Windows用户创建一个单一的.EXE文件进行分发。不需要在您希望运行的PC上安装Python解释器。如果您运行的Windows版本相对较新,所有需要的都在一个EXE文件中。
安装包,您需要安装PySimpleGUI和PyInstaller(您只需安装一次)
pip install PySimpleGUI
pip install PyInstaller
要从使用PySimpleGUI的程序my_program.py
创建您的EXE文件,在您的Windows命令提示符中输入此命令
pyinstaller -wF my_program.py
您将得到一个单独的文件,my_program.exe
,位于执行pyinstaller
命令的文件夹下的dist
文件夹中。
就这样... 在您选择的Windows机器上运行my_program.exe
文件。
"就这么简单。"(这是著名的最后一句话,几乎可以破坏任何事情)
(被引用的著名最后一句话,几乎可以破坏任何事情)
您的EXE文件应该可以运行而不创建“壳窗口”。任务栏上只应显示GUI窗口。
如果您遇到类似以下错误的崩溃
ValueError: script '.......\src\tkinter' not found
然后尝试将--hidden-import tkinter
添加到您的命令中
创建Mac App文件
有报道称可以使用PyInstaller创建App文件。这尚未经过官方测试。
在您的Mac上运行此命令
pyinstaller --onefile --add-binary='/System/Library/Frameworks/Tk.framework/Tk':'tk' --add-binary='/System/Library/Frameworks/Tcl.framework/Tcl':'tcl' your_program.py
此信息位于Reddit上,源可追溯到:https://github.com/pyinstaller/pyinstaller/issues/1350
调试输出
务必查看高级API部分中描述的EasyPrint(打印)函数。保持您的代码不变,将stdout和stderror路由到滚动窗口。
为了有趣,将这些行添加到脚本顶部
import PySimpleGUI as sg
print = sg.Print
这会将所有打印语句转换为在您的屏幕上的窗口中显示的打印,而不是到终端。
外观和感觉
您可以在PySimpleGUI中轻松更改大量默认值和颜色。
ChangleLookAndFeel
想要一种快速使您的窗口看起来好得多的方法?尝试调用ChangeLookAndFeel
。它将在一个调用中设置各种颜色值到小部件、背景、文本等。
或者使用SetOptions
函数来设置您喜欢的样式(以及更多)。您可以在一次函数调用中更改所有默认设置。一行代码即可自定义整个GUI。
sg.ChangeLookAndFeel('GreenTan')
当前有效的样式值如下
SystemDefault
Reddit
Topanga
GreenTan
Dark
LightGreen
Dark2
Black
Tan
TanBlue
DarkTanBlue
DarkAmber
DarkBlue
Reds
Green
BluePurple
Purple
BlueMono
GreenMono
BrownBlue
BrightColors
NeutralBlue
Kayak
SandyBeach
TealMono
实际上,这个调用是通过调用带有大量颜色设置的SetOptions
来实现的。以下是实际执行的调用。如您所见,有很多设置都是为您定义好的。
SetOptions(background_color=colors['BACKGROUND'],
text_element_background_color=colors['BACKGROUND'],
element_background_color=colors['BACKGROUND'],
text_color=colors['TEXT'],
input_elements_background_color=colors['INPUT'],
button_color=colors['BUTTON'],
progress_meter_color=colors['PROGRESS'],
border_width=colors['BORDER'],
slider_border_width=colors['SLIDER_DEPTH'],
progress_meter_border_depth=colors['PROGRESS_DEPTH'],
scrollbar_color=(colors['SCROLL']),
element_text_color=colors['TEXT'],
input_text_color=colors['TEXT_INPUT'])
要查看最新的颜色选择列表,您可以调用ListOfLookAndFeelValues()
您还可以将ChangeLookAndFeel
函数与SetOptions
函数结合使用,以快速修改预置的颜色方案。也许您喜欢这些颜色,但希望边框有更多的深度。您可以根据自己的需求进行调整。
ObjToString 是否曾希望轻松显示对象的内容?使用ObjToString可以获取对象内容的格式化递归遍历。以下这个语句
print(sg.ObjToSting(x))
输出如下
<class '__main__.X'>
abc = abc
attr12 = 12
c = <class '__main__.C'>
b = <class '__main__.B'>
a = <class '__main__.A'>
attr1 = 1
attr2 = 2
attr3 = three
attr10 = 10
attrx = x
您会很快发现没有它是如何编写的。
已知问题
当然,还有一些怪癖和问题。有关这些问题的列表,请参阅GitHub问题数据库。
如前所述,您应该在这里发布所有问题和改进建议。
随机崩溃事件很少发生。代码是稳定的,既没有出现怪异的行为,也没有发布过许多“紧急”版本。
MACS & tkinter
直到2019年11月ttk按钮发布之前,Macs和PySimpleGUI并不兼容。在此之前,按钮必须为白色。现在,Macs可以使用任何颜色作为按钮,并且它们表现得很出色。按钮上的图片也可以正常显示。
问题是常规的tk.Button在Mac上工作不正确。您无法设置按钮颜色。如果尝试设置,按钮上似乎缺少文本。
最近有用户报告说,可以从Python.org网站安装Python 3.7,而不是使用Homebrew版本。这解决了所有按钮颜色问题。
无论您从何处获取Python / tkinter,Macs现在都可以享受使用所有Windows和Linux用户能够实现的外观和感觉颜色主题。
由于按钮问题,许多PySimpleGUI用户已经从PySimpleGUI切换到了PySimpleGUIQt。如果您是其中之一,您应该考虑切换回来。返回PySimpleGUI的一个原因是功能通常首先在PySimpleGUI(tkinter版本)中实现,然后才在其他端口中实现。还有其他一些原因可以尝试再次使用tkinter。
多线程
请注意这是一个严肃警告
不要尝试从多个线程调用PySimpleGUI
!至少对于基于tkinter
的端口来说是这样的,因为tkinter不是线程安全的,并且存在多个线程的已知问题
Tkinter还希望成为您的代码中的主线程。因此,如果您必须运行多个线程,请确保GUI是主线程。
除此之外,您可以在所有端口上自由使用线程与PySimpleGUI一起使用。您可以通过查看示例程序Demo_Multithreaded_Long_Tasks.py
来找到如何在事件循环中运行“长时间运行的任务”的好例子。该程序中有几个使用线程与PySimpleGUI的例子。
如果您正在使用多线程运行,请在关闭窗口后确保删除它们。有可能会发生其他线程的垃圾回收尝试在非主线程中删除窗口,这将导致tkinter崩溃。
可怕的“Tcl_AsyncDelete: async handler deleted by the wrong thread”错误
这个崩溃已经困扰和困惑tkinter用户一段时间了。当用户在应用程序中运行多个线程时,即使用户没有对tkinter进行任何调用,这个问题也可能导致程序崩溃。
我非常高兴地说,有一个解决方案,而且很容易实现。如果你遇到了这个错误,那么以下就是造成它的原因。
当你关闭窗口并删除布局时,该窗口中使用的tkinter小部件不再需要。Python将它们标记为由“垃圾回收器”处理。它们被删除了,但并没有完全从内存中消失。然后,在你线程运行的过程中,Python垃圾回收算法决定是时候运行垃圾回收了。当它告诉tkinter释放内存时,tkinter代码会查看它正在运行的上下文。它看到它是一个线程,而不是主线程,因此产生了这个异常。
解决这个问题实际上非常简单。
当你完成一个窗口时,务必
- 关闭窗口
- 将
layout
变量设置为None - 将
window
变量设置为None - 立即触发Python的垃圾回收器运行
在代码中的顺序如下
import gc
# Do all your windows stuff... make a layout... show your window... then when time to exit
window.close()
layout = None
window = None
gc.collect()
这将确保tkinter小部件都在主线程的上下文中被删除,另一个线程不会意外地运行垃圾回收器
贡献
编写应用程序
你可以通过创建和分享PySimpleGUI GUI来为PySimpleGUI做出贡献。每个人都会从看到他人的实现中学习。正是通过用户的创建应用程序,新的问题和需求被发现。这对项目产生了深远和积极的影响,帮助创建了现在的你。
拉取请求
目前不接受PySimpleGUI的更改/拉取请求。
GitHub仓库
如果你为使用PySimpleGUI的项目创建了GitHub,请在PySimpleGUI GitHub上的“用户截图”问题中发布截图。简单地说一些关于它的事情,我还会将其添加到公告中。人们非常喜欢成功故事,并且展示你的GUI屏幕可以直观地传达你的成功。
版本
版本 | 描述 |
---|---|
1.0.9 | 2018年7月10日 - 首次发布 |
1.0.21 | 2018年7月13日 - 读取me更新 |
2.0.0 | 2018年7月16日 - 将所有可选参数重命名为全部小写 |
2.1.1 | 2018年7月18日 - 公开全局设置,修复 |
2.2.0 | 2018年7月20日 - 图像元素,打印输出 |
2.3.0 | 2018年7月23日 - 修改form.Read返回代码,滑动元素,列表框元素。重命名了一些方法,但暂时保留了遗留调用。 |
2.4.0 | 2018年7月24日 - 按钮图像。修复了可以在树莓派上运行的错误 |
2.5.0 | 2018年7月26日 - 颜色。列表框滚动条。使用tkinter进度条而不是自制的。 |
2.6.0 | 2018年7月27日 - auto_size_button设置。许可证更改为LGPL 3+ |
2.7.0 | 2018年7月30日 - 实时按钮,默认设置window_location |
2.8.0 | 2018年8月9日 - 检查框元素的新的默认None选项,所有元素的文字颜色选项,返回值作为字典,设置焦点,绑定回车键 |
2.9.0 | 2018年8月16日 - 屏幕闪烁修复,do_not_clear 输入字段选项,autosize_text 现在默认为True ,返回值作为有序字典,从进度条中移除文本目标,重新设计返回值和初始返回值,移除遗留的Form.Refresh()方法(由Form.ReadNonBlockingForm()替换),COLUMN元素!!,彩色文字默认值 |
2.10.0 | 2018年8月25日 - 键盘和鼠标功能(将单个键作为按钮返回,将鼠标滚轮作为按钮返回,将回车键绑定到按钮,控制键盘焦点),“另存为”按钮,InputText的更新和获取方法,Listbox的更新,Checkbox的更新和获取,Multiline的获取,Text Element更新的颜色选项,进度条更新可以更改最大值,按钮的更新以更改文本和颜色,Image Element的更新,Slider的更新,表单级别的文本对齐,关闭默认焦点,Listbox的滚动条,图像可以来自文件名或来自内存中,Image的更新)。修复 - 按钮中、消息框中的文本换行,完全移除滑动条边框等 |
2.11.0 | 2018年8月29日 - 为演示程序工作所需的大量小更改。按钮有自己的默认元素大小,修复Mac默认按钮颜色,所有元素的支持内边距,如果列表框被选中,则立即返回的选项,FilesBrowse按钮,Canvas Element,Frame Element,Slider分辨率选项,Form.Refresh方法,更好的文本换行,'SystemDefault'外观设置 |
2.20.0 | 2018年9月4日 - 一些对高级用户感兴趣的大功能。将MsgBox函数重命名为Popup。将GetFile等重命名为PopupGetFile。高级窗口功能从Popup开始,PopupNoWait/PopupNonblocking,PopupNoButtons,默认图标,Listbox/Combobox/Slider/Spin的change_submits选项,新的OptionMenu元素,显示后更新元素,进度条的系统默认颜色选项,新的按钮类型(虚拟按钮)仅关闭窗口,可滚动列!!(是的,现在进入大联盟了),删除LayoutAndShow函数,form.Fill - 对表单的大批量更新,FindElement - 根据键值查找元素(现在所有元素都有键了),不再使用网格打包行元素(一个可能很大的变化),滚动文本框大小更改,新的外观和感觉主题(Dark,Dark2,Black,Tan,TanBlue,DarkTanBlue,DarkAmber,DarkBlue,Reds,Green) |
2.30.0 | 2018年9月6日 - 日历选择器(按钮),无边框窗口,将表单加载/保存到磁盘 |
3.0.0 | 2018年9月7日 - “修复2.x编号选择不佳”的版本。颜色选择器(按钮),“抓取任何地方”窗口默认开启,禁用组合框,Input Element文本对齐(最后部分对于'表格'是必需的),Image Element更改以支持OpenCV?,PopupGetFile和PopupGetFolder有更好的no_window选项 |
3.01.01 | 2018年9月10日 - 菜单!(有点大) |
3.01.02 | 2018年11月11日 - 第11步,所有Element.Update函数都有一个disabled 参数,以便它们可以被禁用。在更新函数中重命名了一些参数(如果破坏了您的代码,请见谅),修复了Image.Update中的错误。没有正确设置大小,再次更改了grab_anywhere逻辑,将抓取任何地方选项添加到PupupGetText(假设禁用) |
3.02.00 | 2018年9月14日 - 新的Table Element(Beta版本),完全删除MsgBox,InputText Element的字体设置,包装更改是一个风险较高的更改,允许一些元素可调整大小,从Menu Element中删除command参数,新的ReadNonBlocking函数名(Finalize,PreRead),更改文本元素自动大小和包装(又一次),Popup函数添加了大量的参数(颜色等) |
3.03.00 | 新功能 - 单行进度表,Table Element的新display_row_numbers,修复EasyProgresssMeters中的错误(函数将很快消失),OneLine和Easy进度表设置为抓取任何地方,但可以关闭。 |
03,04.00 | 2018年9月18日 - 新功能 - Graph Element,Frame Element,将更多设置暴露给Popup调用。请参阅下面的说明以获取更多信息。 |
03.04.01 | 2018年9月18日 - 请参阅发行说明 |
03.05.00 | 2018年9月20日 - 请参阅发行说明 |
03.05.01 | 2018年9月22日 - 请参阅发行说明 |
03.05.02 | 2018年9月23日 - 请参阅发行说明 |
03.06.00 | 2018年9月23日 - 再见FlexForm,你好Window |
03.08.00 | 2018年9月25日 - Tab和TabGroup Elements\ |
2.7的1.00.00版本 | 2018年9月25日 - 2.7的第一个版本 |
03.08.04 | 2018年9月30日 - 请参阅发行说明 |
03.09.00 | 2018年10月1日 |
2.7 01.01.00 | 2018年10月1日 |
2.7 01.01.02 | 2018年10月8日 |
03.09.01 | 2018年10月8日 |
3.9.3 & 1.1.3 | 2018年10月11日 |
3.9.4 & 1.1.4 | 2018年10月16日 |
3.10.1 & 1.2.1 | 2018年10月20日 |
3.10.3 & 1.2.3 | 2018年10月23日 |
3.11.0 & 1.11.0 | 2018年10月28日 |
3.12.0 & 1.12.0 | 2018年10月28日 |
3.13.0 & 1.13.0 | 2018年10月29日 |
3.14.0 & 1.14.0 | 2018年11月2日 |
3.15.0 & 1.15.0 | 2018年11月20日 |
3.16.0 & 1.16.0 | 2018年11月26日 |
3.17.0 & 1.17.0 | 2018年12月1日 |
发布说明
2.3 - 滑块、列表框和图像元素(哇!)
如果使用进度条,避免在打开其他窗口时取消它们。这可能导致未来窗口为空。目前正在修复。
新的调试打印功能。 sg.Print
2.5 在 Output
元素上发现了滚动条问题。滑块将与 ROW 的大小匹配,而不是元素的大小。通常你不会注意到这一点,因为 Output
元素在表单上的位置。
列表框仍然没有滚动轮。可以使用鼠标拖动来查看更多项。鼠标滚轮也可以滚动列表,并且可以按 page up
和 page down
键。
2.7 这是“功能完善”的版本。几乎所有功能都已完成并包含在代码中
2.8 更多文本颜色控制。调用者可以更多地控制焦点和按下回车键时应该点击的按钮。以字典形式返回值!(非常好的补充)
2.9 列表!这是最大的功能,对代码库的影响也最大。添加这个功能很困难,但值得。现在可以制作更多的布局。几乎任何布局都可以通过这个添加来实现。
.................. 插入发布版本 2.9 至 2.30 .................
3.0 我们已经走了很长的路,宝宝!是时候进行重大修订提升了。一个原因是数字开始让人困惑,最新版本是 2.30,但有些人将其读作 2.3,认为它后退了。我在 2.x 系列的数字上有点搞错了,所以为什么不从头开始。无论如何,已经发生了很多事情,这是当之无愧的。
PySimpleGUI 将与众不同的一点是,可以通过点击窗口的任何位置来移动窗口的把戏。这默认开启。这不是与窗口交互的常见方式。通常你必须使用标题栏来移动。PySimpleGUI 不是这样。现在你可以使用窗口的任何部分拖动。对于带有滑块的窗口,你可能想关闭这个功能。这个特性在 Window 调用中启用。
与“任何位置抓取”功能相关的是 no_titlebar 选项,同样可以在 Window 调用中找到。你的窗口将是一个时尚的无边框窗口。这是一个非常有趣的效果。轻微的问题是,你不会在任务栏上获得这类窗口的图标,因此如果你不提供关闭窗口的按钮,除了任务管理器外,没有其他方法可以关闭它。
3.0.2 仍在更新方法中进行更改,未来还有很多更改。继续修改“任何位置抓取”选项。需要在更多地方禁用,例如 PopupGetText 函数。任何在表单上输入文本的情况下,通常都希望关闭“任何位置抓取”功能。
3.2.0
最大的变化是添加了 Table 元素。尝试进行更改,使表单调整大小成为可能,但不知道这将在长期运行中起作用。移除了所有 MsgBox、Get* 函数,并替换为 Popup 函数。Popup 添加了多个新参数,可以更改弹出窗口的外观和感觉。
3.3.0
添加了 OneLineProgressMeter 函数,它不仅提供了一种单行解决方案来解决进度条,而且还允许同时运行多个进度条,这是 EasyProgressMeterCall 无法实现的。
3.4.0
- Frame - 新元素 - 用于分组元素的标签框。类似于 Column
- Graph(类似于 Canvas 元素,但使用调用者的坐标系而不是 tkinter 的)。
- initial_folder - 设置浏览类型按钮(浏览文件/文件夹)的起始文件夹。
- 按钮返回键值而不是按钮文本 如果 指定了
key
, - OneLineProgressMeter!替换 EasyProgressMeter(对不起,有时候进度就是这样工作的)
- Popup - 将所有 Popup 调用更改为提供更多自定义设置
- Popup
- PopupGetFolder
- PopupGetFile
- PopupGetText
- Popup
- PopupNoButtons
- PopupNonBlocking
- PopupNoTitlebar
- PopupAutoClose
- PopupCancel
- PopupOK
- PopupOKCancel
- PopupYesNo
3.4.1
- Button.GetText - 按钮类方法。返回按钮上显示的当前文本。
- 菜单 - 拆分选项。确定菜单是否允许拆分。
- 帮助 - 快捷按钮。如提交、取消等。
- ReadButton - ReadFormButton的快捷方式。
3.5.0
- 所有元素的工具提示。
- 可点击文本
- 文本元素浮雕设置。
- 键作为按钮的目标。
- 按钮的新名称。
- Button = SimpleButton。
- RButton = ReadButton = ReadFormButton。
- 双击可点击的列表条目。
- 自动调整表格宽度现在工作。
- 功能已删除 - 缩放。已从所有元素中删除。
3.5.1
- 修复了Python版本小于3.6时PySimpleGUI损坏的bug(抱歉!)
- 大量修改了Readme。
3.5.2
- 以可以链式调用的方式实现了
Finalize()
。 - 修复了来自框架元素内容的返回值中的bug。
3.6.0
- 将FlexForm重命名为Window。
- 从Mac平台移除了LookAndFeel功能。
3.8.0
- Tab和TabGroup元素 - 精彩的新功能。
1.0.0 Python 2.7
官方消息。PySimpleGUI现在有2.7版本了!
3.8.2
- 在输出元素中公开了
TKOut
。 - 在图形元素中添加了
DrawText
。 - 删除了
Window.UpdateElements
。 Window.grab_anywere
默认为False。
3.8.3
- 列表框、滑块、组合框、复选框、微调、标签组 - 如果设置change_submits,将返回元素的键而不是''。
- 为复选框、标签组添加了change_submits功能。
- 组合框 - 可以将值设置为值表的索引而不是值本身。
- 在图形元素的绘图例程中添加了警告(而不是崩溃)。
- Window - 可以使用“强制顶级”窗口而不是普通窗口。这意味着调用Tk获取窗口时,将调用TopLevel获取窗口。
- Window禁用/启用 - 禁用窗口的事件(按钮点击等)。当你打开第二个窗口并想要禁用第一个窗口执行任何操作时,请使用此功能。这将模拟一个“对话框”。
- 标签组在Window读取时返回一个值。返回值是选定标签的字符串。
- 关闭Popups的grab_anywhere已关闭。
- 为PopupGetFile添加了新参数default_extension。
- 菜单项的键盘快捷键。可以按ALT键选择菜单中的项。
- 删除了旧式的标签 - 这是一个风险性的更改,因为它影响了基本的窗口打包和创建。也将破坏任何使用这种风格标签的旧代码(抱歉大家,这是进步的方式)。
3.8.6
- 修复了菜单。
- 修复了表格颜色。现在它们正常工作。
- 修复了标签的返回键。
- Window隐藏/显示方法。
- 将所有Popup改为移除上下文管理器。
- 对图形对象和元素更新进行了错误检查。
3.9.0 & 1.1.0
- 这是代码的第一个统一版本!
- Python 2.7获得了许多功能。请回顾1.0版本以获取列表。
- 标签位置 - 现在可以将标签放置在顶部、底部、左侧、右侧,而不仅仅是顶部。
3.9.1 & 1.1.2
- 标签功能
- 主题
- 启用/禁用
- 标签文字颜色
- 选定标签颜色
- 为列表框添加了新的GetListValues方法。
- 现在可以在一个窗口中拥有多个进度条。
- 修复了关闭调试输出窗口时其他窗口打开的bug。
- Topanga外观和感觉设置。
- 用户可以创建新的外观和感觉设置/可以访问外观和感觉表。
- 新的PopupQuick调用。显示一个非阻塞的弹出窗口,可自动关闭。
- 树元素部分完成(不要使用,尽管它出现了)。
3.9.3 & 1.1.3
- 创建元素时禁用设置。
- 输入
- 组合框
- 选项菜单
- 列表框
- 单选按钮
- 复选框
- 旋转器
- 多行文本
- 按钮
- 滑块
- 更新了所有元素上的文档字符串。
- 按钮可以接受图像数据和图像文件。
- 按钮更新可以更改图像。
- 图像可以有背景颜色。
- 表格元素的新 num_rows 参数
- 表格元素的新 alternating_row_color 参数
- Tree元素
- 窗口消失/重新出现的方法
- 弹出按钮调整到相同大小
- 外观和感觉的表格
3.9.4 & 1.1.4
- Button.Update 参数顺序更改,使新按钮 ext 位于前端
- 新的 Graph.DrawArc 方法
- 用于标签滑块的滑块刻度间隔参数
- 默认禁用菜单撕裂
- 简化并美化树形数据打印
- 窗口可调整大小参数。默认不可调整大小
- 按钮图片现在可以覆盖文本
- 在列表框双击中的BUG修复。数月来的第一个修复
- 新的外观和感觉能力。使用 ListOfLookAndFeelValues 列出预定义设置
3.10.1 & 1.2.1
- 在 init 和 Update 中为组合框添加新的 readonly 参数
- 为滑块提供更好的默认大小
- 读取表格现在返回选中的行(这是一个大问题功能)
- 对 Table.Update 的部分支持(自行承担风险使用)
- 为窗口设置 Alpha 通道
- 为 Window.Read 设置超时(这是一个大问题功能)
- 在 SetIcon 调用中,图标现在可以是 base64 图片
- Window.FindElementWithFocus 调用
- Window.Move 允许将窗口移动到屏幕上的任何位置
- Window.Minimize 将最小化到任务栏
- 按钮背景颜色可以设置为系统默认值(即不更改)
3.10.2 & 1.2.2
紧急修补版本...与上一个版本同一天发布
- 新的 Read with timer 的超时计时器没有被正确关闭
- Image.Update 方法似乎没有正确编写。它没有像处理图像的其他元素(按钮)那样处理 base64 图像
3.10.3 & 1.2.3
- 新元素 - 垂直分隔符
- 为 InputText 添加新参数 change_submits。如果为 True,则在按钮填充 InputText 元素时将导致 Read 返回
- 超时 = 0 的 Read 与非阻塞读相同,并且是新的首选方法
- 如果窗口关闭,将返回 event == None
- 新的 Close 方法将关闭所有窗口类型
- 表格自动添加滚动条(无需 Column Element)
- 表格更新方法完整
- 在打包行框架时关闭扩展...意外开启(这是此次发布的主要原因)
- 将 Try 添加到 Image Update,以防止在传入无效图像时崩溃
3.11.0 & 1.11.0
- 将版本号的第二位同步起来,以便它们更好地保持同步。2.7 版本实际上是从 3.x 代码构建的,因此它们实际上是相同的
- 重写了 Read 调用...有显著变化。
- 实时按钮与超时或阻塞读配合工作
- 从按钮和按钮更新中删除了默认值参数
- 为树元素添加了新的 show_expanded 参数。这将导致树以完全展开的形式显示
- 在 Read 时,树元素现在返回选中的行
- 新的 Window 方法 BringToFront
- 快捷按钮不再关闭窗口!
- 添加了 CloseButton、CButton 以关闭窗口
3.12.0 & 1.12.0
- 将按钮更改为与 ReadButton 相同,这意味着它将不再关闭窗口
- 所有快捷按钮不再关闭窗口
- 更新表格将清除返回值中的选中行信息
- 进度条使用新的 CloseButton
- 弹出窗口使用新的 CloseButton
3.13.0 & 1.13.0
- 改进了弹出窗口的多个窗口处理,当使用 X 关闭时
- 为以下添加了 change submits
- 多行文本
- 输入文本
- 表格
- 树
- 选择日期时关闭日历选择器的选项
- 树元素更新
- 树滚动条
3.14.0 & 1.14.0
- 更多窗口更改...
- 使用隐藏的根窗口(Tk())
- 所有子窗口都是 Toplevel() 窗口
- 为以下设置只读
- 输入文本
- 多行文本
- 为 InputCombo、Multiline 设置字体
- 为单选元素设置 change_submits
- 为多行、输入元素设置 SetFocus
- 日历选择器按钮的默认年、月、日
- 树元素更新,添加了更改单个键的能力
- 从 ReadNonBlocking 中删除了消息参数
- 修复了使用 X 关闭窗口的问题
- Windows 系统的 CurrentLocation 方法
- 调试窗口选项
- location
- font
- no_button
- no_titlebar
- grab_anywhere
- keep_on_top
- 新的打印 / EasyPrint 选项
- location
- font
- no_button
- no_titlebar
- grab_anywhere
- keep_on_top
- 新的弹出窗口,PopupQuickMessage
- PopupGetFolder, PopupGetFile 新的初始_folder 参数
3.15.0 & 1.15.0
- InputText.Get 方法的错误检查
- 文本颜色、背景颜色添加到多行元素中。
- 输出元素更新方法 - 提供了清除输出的能力
- 图形元素 - 如果设置了新标志,则 Read 返回值
- 更改提交、拖动提交
- 返回 x,y 坐标
- 列元素新的参数 vertical_scroll_only
- 表格元素新的参数 - 绑定回车键 - 返回回车或双击
- 新窗口参数 - 大小、禁用关闭
- “更好的”多窗口功能
- Window.Size 属性
- 弹出窗口 - 新的标题参数,custom_text
- 标题设置窗口标题
- custom_text - 单个字符串或字符串元组设置按钮(s)上的文本
3.16.0 & 1.16.0
- PopupScrolled 中的错误修复
- 新的
Element
快捷函数用于FindElement
- 为与 Qt 向后兼容而创建的虚拟拉伸元素
- 计时器函数现在以毫秒为单位打印,以前是秒
3.17.0 &1.17.0 2-Dec-2018
3.17.0 2-Dec-2017
- 工具提示偏移量现在可编程。设置变量 DEFAULT_TOOLTIP_OFFSET。默认为 (20,-20)
- 现在工具提示始终在顶部
- 禁用菜单项
- 菜单项可以有键
- 状态栏元素(为 Qt 中的真实状态栏做准备)
- 将 enable_events 参数添加到所有可以生成事件的所有元素
- InputText.Update select 参数将选择输入文本
- Listbox.Update - set_to_index 参数将选择单个项
- 菜单可以更新!
- 菜单在返回值中有一个条目
- LayoutAndRead 已弃用
- 多窗口支持继续(X 检测)
- PopupScrolled 现在有位置参数
- Table Element 的 row_height 参数
- 拉伸元素(虚拟)以便与 Qt 源代码兼容
- 按钮菜单元素(虚拟)以便与 Qt 源代码兼容。最终将实现
3.18.0 11-Dec-2018
注意 - 菜单在版本 2.7 中已损坏。不知道它们已经这样多久了。如果您正在运行遗留 Python,请停止使用。
- 默认进度条长度已更改为更短
- 主窗口和跟踪打开窗口的数量已从全局移动到 Window 类变量
- 元素可见性设置(在创建时和在更新元素时)
- 输入文本可见性
- 组合可见性
- 组合替换 InputCombo 作为主要类名
- 选项菜单可见性
- Listbox 可见性
- Listbox 新的 SetFocus 方法
- 单选按钮可见性
- 复选框可见性
- 微调器可见性
- 微调器新的 Get 方法返回当前值
- 多行可见性
- 文本可见性
- 状态栏可见性
- 输出可见性
- 按钮可见性
- 按钮 SetFocus
- 进度条 - 新的 Update 方法(仅用于可见性)
- 图像 - 可点击的图像!enable_events 参数
- 图像可见性
- 画布可见性
- 图形可见性
- 图形 - 新的 DrawImage 功能(终于)
- 框架可见性
- 标签可见性(可能不完全功能)
- 标签组可见性
- 滑块可见性
- 滑块 - 新的 disable_number_display 参数
- 列可见性
- 菜单可见性 - 不功能
- 表格可见性
- 表格 - 新的 num_rows 参数用于 Update - 改变可见行数
- 树可见性
- 窗口 - 新的 element_padding 参数将获取整个窗口的填充
- OneLineProgressMeter - 完全替代了实现
- OneLineProgressMeter - 可以获取取消原因(取消按钮与 X)
- EasyProgressMeter - 完全删除。请使用 OneLineProgressMeter 代替
- 调试窗口、EasyPrint、打印 - 调试窗口在关闭后打印将重新打开
- SetOptions - 可以更改错误按钮的颜色
- 运行 PySimpleGUI.py 时创建的窗口更大。旨在帮助回归测试
3.19.2 13-Dec-2018
- 尝试更改按钮颜色时对Mac的警告
- Button.Update的新参数 - image_size 和 image_subsample
- 按钮 - 当边框深度 == 0 时移除高亮
- OneLineProgressMeter - 更好的布局实现
3.20.0 & 1.20.0 18-Dec-2018
- 新面板元素
- Graph.DeleteFigure方法
- disable_minimize - Window的新参数
- 2.7菜单的修复
- Debug Window不再默认重定向stdout
- 可以通过指定Print / EasyPrint调用进行重定向
- 为PopupScrolled添加新非阻塞
- 可以为PopupScrolled窗口设置标题
3.21.0 & 1.21.0 28-Dec-2018
- 按钮菜单元素
- 嵌入默认的base64图标
- 输入文本右键菜单
- 禁用的输入文本现在是'readonly'而不是禁用
- 列表框右键菜单
- 多行右键菜单
- 文本右键菜单
- 输出右键菜单
- 图像右键菜单
- 画布右键菜单
- 图形右键菜单
- 框架右键菜单
- 标签,标签组右键菜单(不确定是否正确工作)
- 列右键菜单
- 表格右键菜单
- 树右键菜单
- 窗口级别右键菜单
- 窗口图标可以是文件名或字节(Base64字符串)
- Window.Maximize方法
- 尝试更好地使用Combobox中的样式
- 修复了阻止OneLineProgressMeter设置条颜色的bug
3.22.0 PySimpleGUI / 1.22.0 PySimpleGUI27
- 将类型提示添加到代码的一些部分
- 输出元素可以被设置为不可见
- 按钮图像的大小和子采样
- ButtonMenusup的可视性
- 尝试指定Column元素的大小(有限的成功)
- 表格元素
- 新参数row_colors
- 新参数vertical_scroll_only - 注意 - 需要禁用以获得水平滚动条
- Tree元素
- 新参数row_height
- 新功能 - 使用文件名或Base64图像的树项图标
- 修复了发送连续鼠标事件的bug
- FindElement / Element调用的新参数silence_on_error
- 滑块现在返回浮点数
- 使用Python 2.7时的菜单修复
- Combobox样式(再次)
3.2.0 PySimpleGUI / 1.23.0 PySimpleGUI27 16-Jan-2019
- 动画GIF!
- 日历选择器保持在其他窗口之上
- 修复了表格没有列标题的bug
- 表格现在使用字体参数
3.24.0 1.24.0 16-Jan-2019
- PopupAnimated - 用于显示"加载"类型窗口的弹出调用
3.25 & 1.25 20-Feb-2019
- 注释 :-)
- 立即将文本转换为字符串
- 在X关闭主程序时捕获异常
- 在所有图形原语中捕获异常
- 将exportselection=False参数添加到Listbox,以便可以使用多个Listbox
- OneLineProgressMeter - 现在可以根据需要在每个调用中更改文本
3.27.0 PySimpleGUI 31-Mar-2019
Mixup.... 3.26更改似乎没有正确发布,因此现在在3.27中发布
- do_not_clear现在默认为TRUE!!!
- 输入元素
- 多行元素
- 使单选按钮可以在不同的容器中
- 可以在Multiline.Update调用中修改自动滚动设置
- PopupGetFolder, PopupGetFile, PopupGetText - 如果未提供,则标题默认为消息
- PopupAnimated - image_source可以是文件名或字节(base64)
- Option Menu现在可以更新值
3.28.0 11-Apr-2019 PySimpleGUI
- 新窗口参数 - layout - 第二个参数。现在可以直接传递布局!
- 新快捷键
- I = InputText
- B = Btn = Butt = Button
- 在创建按钮时将按钮文本转换为字符串
- 现在在搜索具有焦点的元素时,除了输入字段外,还将返回按钮
3.29 22-Apr-2019
- Graph 新方法 -
RelocateFigure
- 输出元素不再接受焦点
3.32.0 PySimpleGUI 2019年5月24日
- ALLL 工具提示的重构。曾经总是显示在元素的左上部分。现在不会显示在鼠标进入或编辑的更近位置
- 新 Element.Widget 基类变量。将 tkinter 带入用户对底层 GUI 框架组件的新架构
- 新 SetTooltip 元素方法。意味着所有元素都获得此方法。现在可以为所有元素动态设置工具提示
- 在使 Listbox 元素可见或不可见时包含滚动条
- 新 Radio 元素方法 -
Radio.ResetGroup()
将组中的所有元素设置为 False* 为 Multiline 元素添加边框宽度 Button.Click()
- 新方法 - 生成按钮点击事件,就像用户点击了按钮(在 tkinter 层级)- 创建了一个 Graph.Images 字典来跟踪图中使用的图像。当删除图时,所有关联的图像也应被删除。
- 添加了
Graph.SetFocus()
以使图元素获得焦点,就像您可以输入元素一样 - 表格新参数 -
hide_vertical_scroll
如果为 True,将隐藏表格的垂直栏 - 窗口 - 新参数 -
transparent_color
。使单色完全透明,这样您可以看到通过窗口的内容,您可以在窗口中点击。就像它从未存在过一样。 - 新的
Window.AllKeysDict = {}
已被所有 PySimpleGUI 端口采用。这是一种自动创建缺失键、存储和检索键的新方法。 - 修改了
Window.Maximize
的实现方式,之前使用的是 '-fullscreen' 属性。现在使用 'zoomed' 状态 - 窗口获得了一个新的
Normal()
方法,用于从最大化状态返回。设置 root.state('normal') - 当关闭“最后一个”窗口时,Window.Close() 现在关闭特殊的
Window.hidden_master_root
窗口 - 添加了
Window.SetTransparentColor
方法。与窗口创建时设置参数具有相同的效果 - Element 的 Widget 存储在
.Widget
属性中 - 通过使用其 Key 来使 ComboBox 的 ID 唯一
- 修改了 Multiline,现在它是凹进的,并具有边框深度设置
- 移除了用于 Graph 元素的第 2 个画布
- 修改了 Linux 和 Windows 上不实现标题栏的方式。现在在 Linux 上使用 -type splash
- PopupScrolled - 添加了使用 CloseButton 关闭窗口的功能
- 修复了 PopupGetFolder 以使用正确的 PySimpleGUI 程序结构(键)
- PopupGetText 正确地使用 value 变量填充了值,使用了键
- PopupAnimated 终于得到了完全透明的背景
3.33.0 和 1.33 PySimpleGUI 2019年5月25日
- 由于调试器的紧急修复。旧的错误是 Image Element 没有正确测试 COLOR_SYSTEM_DEFAULT。
3.34.0 PySimpleGUI & 1.34.0 PySimpleGUI27 2019年5月25日
pip rhw w cenf
- 修复了 Window.Maximize 和 Window.Normal - 需要 Linux 的特殊代码
- 检查 DEFAULT_SCROLLBAR_COLOR 是否不是 COLOR_SYSTEM_DEFAULT(崩溃)
3.35 PySimpleGUI & 1.35 PySimpleGUI27 2019年5月27日
- 修复了 Bug - 当设置复选框的默认值时,它还禁用了元素!
3.36 PySimpleGUI & 1.36 PySimpleGUI27 2019年5月29日
用户请求和新 imwatchingyou
调试器的需求组合
- 为未来内置调试器添加了新的调试器图标
- 修复了 FindBoundReturnKey 中的 Bug - 需要检查 Panes
- 添加了新的 Window 函数来打开/关闭 Grab Anywhere 功能
Window.GrabAnyWhereOn()
Window.GrabAnyWhereOff()
- 添加了新的“调试器”按钮,它像其他按钮一样内置。这是一个带有标志的小按钮。用于未来当调试器集成到 PySimpleGUI 本身时(很快!)
- 修改文本元素换行长度计算。公式中的长度从+40像素改为+10像素
- PopupGetFile新增参数
multiple_files
。如果为True,则允许选择多个文件
3.37 PySimpleGUI & 1.37 PySimpleGUI27 2019年6月1日
- 内置调试器在这里 - 可能还没有完全工作,但PySimpleGUI.py文件中已经为此投入了大量代码。目前,
imwatchingyou
包是使用PySimpleGUI调试器的方法。但很快你就不需要那个项目来调试你的程序了。 - 一些奇怪的代码格式化悄悄地进来了。与上一个版本相比,这里有351个差异。我不确定发生了什么,但正在手动检查每一个更改。
- 新日历按钮功能
- locale, format - 新参数用于调用TKCalendar
- 如果已设置,则使用自定义图标作为窗口图标
- CalendarButton新增参数
locale
,format
- 内置PySimpleGUI调试器的主体已经添加,但尚未“官方支持”。尝试按键盘上的“中断”或“ctrl+中断”。
- 新增中断/暂停按钮和调试器的绑定
- 新增调试按钮将启动调试器。
- 新增参数
debugger_enabled
添加到Window调用中。默认为启用。 - 您的程序对Read的调用是刷新调试器所需的全部内容
- 新增
Window
方法来控制调试器访问EnableDebugger
- 打开调试器的快捷键DisableDebugger
- 关闭调试器的快捷键
- 将文本元素的换行长度恢复到+10像素的+40像素
PopupGetFolder
,PopupGetFile
- 已修复,以便“隐藏”的主窗口保持隐藏(一个Linux问题)- 当设置no_window选项时,为
PopupGetFiles
添加了对多个文件的支持。
3.38 PySimpleGUI,1.38 PySimpleGUI27
- 多行文本 - 如果创建为“禁用”,则现在具有“只读”状态
- 多行文本 - 如果窗口创建为可调整大小的,则多行元素现在会在窗口放大时扩展,这是一个长期请求的功能。
- 输出元素在Y方向上扩展
- 将“可扩展行”选项添加到PackFormIntoFrame,允许未来元素也可以扩展
- 错误元素 - silence_on_error选项
- 文本元素换行 - 终于做对了?不再添加“调整因子”
- PopupScrolled - 窗口现在可调整大小
- 从测试框架中“启动内置调试器”的选项
- 请记住,调试器仍然在这段代码中!它可能或可能不按
imwatchingyou
调试器代码的最新版本运行。这段代码需要重新集成
3.39 PySimpleGUI & 1.39 PySimpleGUI27 2019年6月13日
- 将imwatchingyou调试器代码移植到PySimpleGUI代码中
- 用较新的imwatchingyou版本替换了旧的内置调试器代码
- 需要删除PySimpleGUI调用之前的所有'sg.',因为未导入
- 在第一次调用
refresh
或show
时动态创建调试器对象
- 开始重命名以_开头的私有类方法的过程
- 这是为了生成正在工作的自动文档
- 修复了点击调试按钮时的崩溃
- 修复了DeleteFigure中的错误。需要单独删除图像
- 添加了更多的类型提示
- 新增
TabGroup
方法SelectTab(index)
在TabGroup
中选中一个Tab
- 新增
Table.Update
参数 -select_rows
。要选择的行列表(0是第一行) - 在
Window.Layout
中的错误检查为用户提供错误“提示”- 寻找错误放置的']'
- 寻找缺少'()'的函数
- 弹出一个窗口警告用户而不是崩溃
- 如果弹出窗口开始碍事,可能需要重新考虑
- 新增
Window.Disable()
和Window.Enable()
的实现- 之前完全无法正常工作
- 现在使用"-disabled"属性
- 允许组合框有空的起始值
- 之前崩溃了
- 启用应用程序稍后填写这些内容
4.0.0 PySimpleGUI & 2.0.0 PySimpleGUI27 2019年6月19日
- 文档字符串!文档字符串!文档字符串!
- 您的IDE即将非常高兴
- 所有元素都在调用签名中有实际的文档
- 将使用代码生成后续的Readme和ReadTheDocs
- 非常感谢@nngogol复制并添加所有这些字符串,还因为他创建了一个整个文档创建系统。
- PySimpleGUI.py的新版本字符串
- 所有SetFocus调用的新参数
- def SetFocus(self, force=False)
- 如果force为True,则调用focus_force而不是focus_set
- 获取 - 新的无线电按钮方法。如果无线电按钮被设置,则返回True
- 将调试器类重命名为_Debugger,以便IDE不会混淆
- 现在可以通过属性Button.ButtonColor获取上次设置的按钮颜色
- 将许多回调处理程序重命名为以_开头
- 修复Read调用中的内存泄漏。每次调用read都会因为root.protocol调用而丢失一点内存
- Listbox.Update - 新参数 - scroll_to_index - 滚动视图,以便索引显示在顶部
- 第一个使用新文档的PyPI发布!
PySimpleGUI 4.1周年发布!2019年8月4日
从未有过这么长的延迟,很抱歉所有用户!终于来了。文档字符串仍然是重点。
- 可以使用PySimpleGUI.version找到版本
- 文件顶部的新许可信息
- 文档字符串中使用的类型。此外,一些注释中有类型提示。因为还在2.7上运行,所以不能使用完整的类型
- 添加了使用警告。刚刚开始使用这个机制。可能很好,也可能不好。我们将看看这个变化
- 添加了TOOLTIP_BACKGROUND_COLOR,可以更改(但是这是tkinter唯一的设置,所以要理解这一点!)
- Graph.DrawText。在绘制文本到图形元素时设置text_location。它确定在绘制文本时文本的哪一部分位于您提供的点上。选项有
- TEXT_LOCATION_TOP
- TEXT_LOCATION_BOTTOM
- TEXT_LOCATION_LEFT
- TEXT_LOCATION_RIGHT
- TEXT_LOCATION_TOP_LEFT
- TEXT_LOCATION_TOP_RIGHT
- TEXT_LOCATION_BOTTOM_LEFT
- TEXT_LOCATION_BOTTOM_RIGT
- TEXT_LOCATION_CENTER
- 标志ENABLE_TK_WINDOWS = False。如果为True,则所有窗口都使用tk.Tk()创建
- 由于添加到基类,现在所有元素都可用SetFocus。但是可能不适用于所有元素
- 添加了Combo.GetSElectedItemsIndexes() - 返回所有当前选中项的列表
- 修复Listbox.Update - set_to_index改为int,list或tuple
- 添加到tkinter的askopenfilename的调用中添加了parent参数,directory,filenames。不确定为什么之前没有传递root
- Button.Update - 还将activebackground设置为按钮的背景颜色
- Graph - 创建时的新参数。float_values。如果为True,则表示您的坐标系是float而不是int
- Graph.Update - 将背景颜色作为可选参数,以便只能设置可见性
- Frame.Layout现在返回self以便链接
- TabGroup.Layout现在返回self以便链接
- Column.Layout现在返回self以便链接
- Menu.Update中的menu_definition现在为可选,以便只能更改可见性
- 添加了对菜单栏的不可见性支持
- Table.Update支持设置交替行颜色和row_colors(行和要设置的颜色的列表)
- 将Window.TimeoutKey设置为TIMEOUT_KEY
- Window - 检查标题(应为字符串)和布局(应为列表)的类型,如果错误则警告用户
- 窗口 - 通过在方法名前添加下划线(如Show)来重命名一些方法,因为它们不是用户可调用的
- 另一个快捷方式!Elem = Element = FindElement
- SaveToDisk - 不会将按钮写入文件。修复了由于按钮具有键而导致的问题
- 重映射 Windowl.CloseNonBlockingForm、Window.CloseNonBlocking 为 Window.CloseNonBlocking
- 修复了从组合列表返回值的问题。之前没有处理当前值不在提供值列表中的情况
- Spin - 返回 Spin 创建或更新时提供的列表中的实际值
- 将 FillFormWithValues 修改为使用新的内部 AllKeysDict 字典
- 在创建组合时添加了 try,因为当窗口创建两次时可能会出现问题。之前的窗口已经创建了样式
- 将表格(树)id列表添加到 Table 元素中
- 启用自动关闭以使用秒的分数
- 在销毁时添加了 try,因为如果用户取消操作,它可能会失败
- 弹出窗口 - 图标默认不再设置为默认值
- 修复了调试器尝试执行 REPL 命令的问题。exec 只在 Python 3 中可用
- main() 在程序运行时将以大字体显示版本号
4.2 PySimpleGUI 2.2 for PySimpleGUI27 18 - Aug 2019
酷查找版本发布!不再需要 FindElement。您仍然可以使用 FindElement。然而,您的代码将看起来很奇怪且过时。;(即可读) 更多的 Docstring 和主要文档更新!
- 2.7 终于得到升级,并且与它一起还有文档字符串。然而,它不会像主要 PySimpleGUI 那样进行完整版本的升级,因为这可能是它的最后一个版本。
- 新
window[key] == window.FindElement(key)
- 新增了 Update 调用方法。可以直接调用一个 Element,它将调用其 Update 方法
window[key](value=new_value) == window.FindElement(key).Update(value=new_value)
- 将 Tearoff 部分作为元素的一部分,理论上任何东西都可以成为菜单
- 删除了一些
__del__
调用。希望这不会在内存泄漏中咬我 - 添加了 Combo.Get 方法
- 删除了 Combo.GetSelectedItemsIndexes
- 新增了 Graph 方法 SendFigureToBack、BringFigureToFront
- 改变了按钮释放,以改善 Graph 拖动
- 现在返回 key+"Up" 的事件
- 同时返回值中的 x,y 坐标
- 添加了 Tab.Select 方法
- 添加了 TabGroup.Get 方法 - 返回当前选中的 Tab 的键
- 添加了 Window finalize 参数 - 如果还包含布局,则将调用 finalize。不再需要 Finalize!!
- 安静、稳定的变化开始于 PEP8 用户界面
- 现在可用的 Window 方法 - read、layout、finalize、find_element、element、close
- 仅使用这些方法,应该可以提供 100% PEP 的兼容性,对于大多数 PySimpleGUI 程序来说
- 通过使用 .Widget 成员变量,添加了跨所有元素查找焦点的功能
- 固定了列的大小!现在它们将最终是指定的大小
- 修复了在设置 no_window 选项时没有使用 PopupGetFile 中的 initialdir 参数
4.3 PySimpleGUI 发布 22-Aug-2019
PEP8 PEP8 PEP8 布局控件!终于可以居中内容了。这一次有一些相当有影响的变化。让我们希望这不会在我们面前全部爆炸!
- 为类方法和函数添加了 PEP8 接口
- 终于有一个符合 PEP8 的 PySimpleGUI 接口了!!
- “旧的 CamelCase” 仍然存在,并将保持相当长一段时间
- 如果您想,可以随意混合搭配,但建议选择一个并坚持下去
- 所有文档和演示程序都需要进行更改
- 在布局检查时,内部保存父行框架
- 在所有 Update 调用上显示警告 - 检查 Window.Read 或 Window.Finalize 是否已被调用
- 如果尝试使用两次布局,则显示警告
- 显示“错误弹出窗口”以吸引用户的注意
- 删除了所有元素特定的 SetFocus 方法,并使其对所有元素可用
- 为 Listbox 添加了 no_scrollbar 参数。如果为 True,则不会显示滚动条
- 新增了 Window 的 finalize bool 参数。去除了 "链式" 调用 .Finalize() 的需求。
- 新增 Column、Frame、Tab 元素和 Window 的 element_justification 参数
- 有效值是 'left'、'right'、'center'。只检查第一个字母,因此可以使用 'l'、'c'、'r'
- 默认值 = 'left'
- 结果是,该容器内部的所有元素都将根据指定的方式进行对齐
- 与新的 Sizer 元素配合良好
- 新增 Column 元素的 justification 参数。
- 将对齐 Column 及其所在的行到该设置(左、右、居中)
- 允许单独的行进行对齐,而不仅仅是整个窗口
- 新增 Sizer 元素
- 具有宽度和高度参数。可以设置一个或两个
- 使包含在其内的元素根据 Sizer 元素的宽度和高度进行扩展
- 对于居中对齐有很大帮助。例如,框架将缩小以适应内容。使用 Sizer 来填充到正确的尺寸
- 添加了 Window.visibility_changed 以匹配 PySimpleGUIQt 调用
- 修复了调试器,使其能够显示任何新添加的局部变量
4.4 PySimpleGUI 发布 5-Sep-2019
- window() - 调用你的 Window 对象将执行一个读取调用
- InputText - 更新后移动光标到末尾
- 快捷键 - 正在尝试获得一个可管理的和稳定的普通、短、超短快捷键集
- DD - 下拉框(组合框)
- LB, LBox - 列表框
- R, Rad - 单选按钮
- ML, MLine - 多行文本框
- BMenu - 按钮
- PBar, Prog - 进度条
- Col - 列
- 列表框 - 新方法 GetIndexes 返回当前选中的项作为索引列表
- 输出 - 新方法 Get 返回输出元素的文本内容
- 按钮 - 对于 Mac,不允许设置按钮颜色。以前只发出警告
- 按钮菜单 - 新的 Click 方法将像正常按钮的 Click 方法一样点击按钮
- Column 的滚动现在正确地与鼠标滚轮配合工作。Shift+鼠标滚轮将水平滚动
- 表格 - Get 方法是 Get 的一个虚拟版本,因为 Qt 端获得了真正的 Get 方法
- 表格 - 如果在创建 Table 元素时将 Column Headings 设置为 None,将添加数字列标题
- 表格 - 修复了列疯狂调整大小的错误!!!
- 表格 - 现在可以调整单个列的尺寸
- 树 - 返回的是键的字符串表示,而不是键本身
- SetIcon 将在加载图标出错时设置默认的 base64 图标
- 修复了重复键错误。尝试在重复键的情况下将 "唯一键计数器" 添加到键的末尾,但需要先将其转换为字符串
- 列
- 不再扩展或填充
- 尺寸适用于滚动和正常情况
- 设置焦点 - 修复了在具有可以获取焦点的标签、列、框架等元素的情况下设置焦点的错误。在顶层窗口上设置焦点
- InputText 元素现在将导致行由于 X 方向扩展而扩展
- 框架 - 尝试设置尺寸,但看起来没有正确设置
- 标签现在将扩展并填充(我希望这是可以的!)
4.5 PySimpleGUI 发布 04-Nov-2019
- 元数据!
- 所有元素都有一个新元数据参数,您可以将其设置为任何内容,并通过 Element.metadata 访问
- 窗口也可以有元数据
- Window.finalize() - 内部更改以执行完全的 window.read(超时=1),以确保正确完成所有初始化
- 删除了类型导入
- ButtonReboundCallback - 与 tkinter 的 Widget.bind 方法一起使用。将其用作绑定目标,您将通过 window.read() 获取事件
- 新增 Element 方法,这些方法可以在各种元素上工作
- set_size - 设置宽度和高度。可以设置一个或两个
- get_size - 返回元素的宽度、高度(底层Widget),通常以像素为单位
- hide_row - 隐藏元素占用的整行
- unhide_row - 使元素占用的整行可见
- expand - 使元素扩展以填充X或Y方向或两个方向上的可用空间
- InputText元素 - 更新得到新参数:text_color=None,background_color=None,move_cursor_to='end'
- RadioButton - 更新修复。曾导致从磁盘加载窗口时出现问题
- 文本元素 - 新增用于文本元素设置凸起效果的边框宽度参数
- 输出元素 - 特殊的扩展方法,类似于其他所有元素
- 框架元素 - 可以使用Update方法更改框架的文本
- 滑块元素 - 可以更改范围。之前必须更改值来更改范围
- 可滚动框架/列 - 改变鼠标滚轮的滚动方式。曾导致在滚动单个列时所有内容都滚动
- 注意 - 对于使用鼠标滚轮滚动的表格可能存在不良副作用
- 创建窗口时设置图标时的修复。没有默认为正确的图标
- Window.get_screen_size()返回屏幕宽度和高度。不需要已经创建的窗口,因为这是一个类方法
- Window.GetScreenDimensions - 即使窗口已被销毁,使用get_screen_size也会返回大小
- 现在每次使用完定时器后都会删除窗口
- 组合框不再默认为第一个条目
- 新的Material1和Material2外观和感觉颜色方案
- change_look_and_feel有新的"force"参数。设置为True以在Mac上强制使用颜色
- 在popup_get_files中修复了当文件名为空时的错误
- 在Window.SetIcon - 现在使用文件在Linux中正确设置图标。以前总是默认设置
4.6 PySimpleGUI 16-Nov-2019
- 主题!!!
- 添加了大量外观和感觉主题。现在总数不到100
- 为一些缺少的功能添加了文档注释
- 为button_rebound_collback,set_tooltip,set_focus添加了PEP8绑定
- Spin元素更新 - 简化了代码
- 允许将tk.PhotoImage对象传递到Image.update作为数据
- DrawRectangle - 添加了line_width参数。默认为1
- 为Slider添加了修复 - 只有在设置背景颜色时才会设置槽的颜色
- 将deiconify调用添加到Window.Normal,以便可以用于恢复已最小化的窗口。在Linux上不起作用
- 组合框 - 修复了不允许指定"0"作为默认值的错误
- 表格 - 将包含表格的框架保存到成员变量table_frame中。这将使框架能够在将来变为可展开的,以便在窗口扩展时调整表格的大小。
- 大量大量外观和感觉主题!!!
- 为外观和感觉添加了SystemDefaultForReal,这将产生100%未样式化的窗口
- 将外观和感觉表中的"gray"字符串更改为RGB字符串(例如gray25 = #404040)。不是所有图形子系统
- 从外观和感觉设置更改中移除了Mac限制。现在除了Mac上的按钮颜色之外,所有颜色设置都已更改
- "模糊逻辑"外观和感觉主题选择 - 不再需要记住每个字符并正确地得到大小写。现在可以"足够接近"并且它就会工作
- 新功能 - preview_all_look_and_feel_themes。导致显示一个窗口,显示所有当前可用的外观和感觉主题
- 从popup get file,folder,text中删除了CloseButton的使用。导致输入字段停止工作。请参阅GitHub上的错误
4.7.0 PySimpleGUI 26-Nov-2019
TTK小部件!欢迎Mac用户回来!
- 在使用ttk小部件方面取得了重大进展
- 添加了ttk按钮 - MACS可以再次使用彩色按钮了!!(这是个很大的事情)
- 现有的基于ttk的元素现在正在正确着色和样式化
- 可以设置单个窗口或系统范围内的ttk主题,但不再基于单个元素
- 可以在非Mac系统上有选择地使用ttk按钮
- 端口号变量 == 'PySimpleGUI',以便您的代码可以确定正在运行哪个 PySimpleGUI
- InputText 新参数 - use_readonly_for_dsiable 默认为 True,允许用户在禁用时在只读设置和实际禁用设置之间切换
- 进度条 ttk 风格名称的重构
- 按钮 - 新参数 use_ttk_buttons - True = 强制使用,False = 强制不使用,None = 让 PySimpleGUI 决定是否使用
- Mac 系统强制使用 ttk 按钮,除非按钮中添加了图片
- TabGroup - 无法直接设置 ttk 主题
- 窗口新参数
- ttk_theme - 为整个窗口设置主题
- use_ttk_buttons - 为整个窗口设置 ttk 按钮使用策略
- 更多的窗口布局错误检查 - 检查行是否为可迭代对象(列表)。如果不是,将显示错误提示框以帮助用户查找错误
- 修复进度条未获得自动分配给主题的键
- 新的窗口方法 - send_to_back (SendToBack) - 将窗口发送到所有窗口堆栈的底部
- 修复正常 tk 按钮文本 - 原本是左对齐而不是居中
- 修复表格颜色 - 由于错误的 ttk 样式而没有正确设置
- 修复树 ccolors - 由于错误的 ttk 样式而没有正确设置
- TabGroups 现在可以正确处理颜色,包括当前选定的标签颜色和非标签区域(标签旁边的背景颜色)
- 新的 set_options 参数
- use_ttk_buttons - 设置系统级 ttk 按钮使用策略。对于弹出窗口等使用 ttk 按钮的功能是必需的
- ttk_theme - 设置系统级 ttk 主题
- progress_meter_style 参数不再使用并生成警告
- list_of_look_and_feel_values 现在在返回之前对列表进行排序
- 移除了从外观和感觉调用中限制 Button 颜色的 Mac 系统限制。现在可以设置任何按钮颜色!
- popup_scrolled 新参数 - 所有弹出窗口都需要更多参数,但这些参数对于滚动弹出窗口是必需的
- background_color
- text_color
- no_titlebar
- grab_anywhere
- keep_on_top
- font
- 测试工具包更改,以帮助测试新的 ttk 功能(希望将来缩小此窗口,以便适合 Trinket、Pi 等)
4.8.0 PySimpleGUI 4-Dec-2019
多彩多行文本!经常请求的功能,回到 ttk 按钮可以带有图像,彩色打印!
- 多行元素更新方法中增加了两个新参数
- text_color_for_value - 新增文本的颜色
- background_color_for_value - 新增文本的背景颜色
- 新的 Print/EasyPrint 参数和功能
- text_color,background_color - 控制打印到“调试窗口”时的文本颜色和背景颜色
- 仅在 stdout 未重定向的模式下(默认)使用
- 如果正常的 print 调用有这个参数,那不是更好吗?
- Print(event, text_color='green', background_color='white', end='')
- ttk Buttons
- 可以带有图片。不再强制带有图片的按钮使用旧的 tk 按钮。现在您可以选择任意一种
- 可以更新按钮颜色
- 可以更新按钮图片
- 设置警告过滤器,以便重复警告
- 新的全局变量
- CURRENT_LOOK_AND_FEEL - 正在使用的当前外观和感觉设置。最初为“默认”
- BROWSE_FILES_DELIMITER - 默认为 ";" 它是文件浏览按钮返回条目之间的字符串
- TRANSPARENT_BUTTON - 已弃用 - 不正确地用作早期时代的遗物。它的值是灰色
- 窗口 - 温馨提示,如果您未为窗口选择外观和感觉。它们很容易停止。添加 change_look_and_feel 行
- 测试工具包使用调试窗口,所以当单独运行 PySimpleGUI 时,出现两个窗口请不要感到惊讶
- 以绿色在白色文本上打印“事件”
- 正常打印“values”
4.9.0 PySimpleGUI 7-Dec-2019
“终于解决了标签”版本
- 标签颜色!
- 在创建 TabGroup 时,现在可以指定
- 所有标签的文本和背景颜色
- 选定标签的文本和背景颜色
- 如果没有指定,则将使用外观和感觉主题(结果非常棒)
- 标签可见性 - 现在可以使用更新和创建时控制单个标签的可见性
- 更多 "外观和感觉" 主题!再也没有理由再次使用灰色。现在有126个主题可供选择。以下是32个新主题:"默认无更多提示"、"深黑1"、"深蓝12"、"深蓝13"、"深蓝14"、"深蓝15"、"深蓝16"、"深蓝17"、"深棕5"、"深棕6"、"深绿2"、"深绿3"、"深绿4"、"深绿5"、"深绿6"、"深灰4"、"深灰5"、"深灰6"、"深灰7"、"深紫6"、"深红2"、"深青10"、"深青11"、"深青12"、"深青9"、"浅蓝6"、"浅蓝7"、"浅棕12"、"浅棕13"、"浅灰1"、"浅绿10"、"浅绿9"、"浅灰6"
- preview_all_look_and_feel_themes 现在有一个 columns 参数来控制每行条目数
- 由于主题数量众多,每个主题显示尺寸已减小
4.10.0 PySimpleGUI 9-Dec-2019
"糟糕,调试器坏了!" + "漂亮的进度条" 发布
- 修复内置调试器不工作的问题
- 由于即将到来的教育用途,这很重要
- 自 4.5.0 版本以来一直有问题,因为 Finalize 发生更改
- 使用外观和感觉颜色设置 ProgressBar 元素颜色
- 使用按钮颜色、输入元素和输入元素文本的组合
4.11.0 PySimpleGUI 10-Dec-2019
元素 & 窗口绑定发布
- Element.bind - 所有元素的新方法
- 允许将 tkinter 绑定添加到任何元素
- 如果发生 tkinter 事件,将返回 window.read() 的事件
- Window.bind - 窗口的新方法,就像元素一样
- 允许将 tkinter 绑定添加到窗口
- 如果发生 tkinter 事件,将返回 window.read() 的事件
- TabGroup 字体 - 现在可以设置 Tab 文本的字体和字体大小
4.12.0 PySimpleGUI 14-Dec-2019
在 Linux 上,TK 元素周围再也没有轮廓了
- 修复了 Linux 上(几乎)所有 TK 元素周围神秘的白色边框的长期问题
- 可以设置禁用按钮的颜色
- 新的按钮和 Button.update 参数 - disabled_button_color
- 指定为(文本颜色,背景颜色),就像按钮颜色一样
- 对于正常 / TK 按钮 - 可以设置按钮文本颜色
- 对于 TTK 按钮 - 可以设置禁用按钮和文本颜色
- 任何参数都可以为 None 以使用当前设置
- 从弹出窗口中删除了 CloseButton 的使用(CloseButton 代码中仍然有错误,但现在弹出窗口中没有错误)
- ComboBox - 如果想要使用 update 方法设置为只读,则删除了设置禁用的要求
- 修复了 Linux 上取消文件/文件夹浏览的问题,导致目标被清除而不是只是取消
- 删除了设置按钮颜色的 try 块 - 如果用户设置了错误的颜色,则不执行此操作
- 现在在关闭弹出窗口后删除窗口
4.13.0 PySimpleGUI 18-Dec-2019
表格和树标题颜色,扩展图形方法
- Element.expand 新参数 - expand_row。如果为真,则行将随着小部件一起展开。提供更好的调整大小控制
- 现在在图形元素的单位转换中使用 math.floor 而不是 int 转换
- Graph.draw_point - 现在使用调用者的图形单位来指定点的大小
- Graph.draw_circle - 将半径大小从用户的图形单位转换为。
- Graph.draw_circle - 添加 line_width 参数
- Graph.draw_oval - 添加 line_width 参数
- Graph.get_figures_at_location - 获取特定点的图形列表的新方法
- Graph.get_bounding_box - 返回先前绘制的图形的边界框
- 表格和树元素
- 3 个新的元素创建参数
- header_text_color - 列标题的文本颜色
- header_background_color - 列标题的背景颜色
- header_font - 列标题的字体家族、样式和大小
- 默认使用当前的外观和感觉设置
- 使用类似于选项卡的算法 - 使用输入文本的背景和文本颜色
- 3 个新的元素创建参数
- Spin 元素 - 修复了如果默认值为 "None" 则显示 "None" 的错误
- 测试工具箱故意设置不正确的外观和感觉,以便选择一个随机值
4.14.0 PySimpleGUI 23-Dec-2019
主题!
- 主题现在正在替换change_look_and_feel。旧的调用仍然可以使用
- 许多新的主题功能。在文档中搜索"theme_"来找到它们。还有一个讨论主题的部分
- "深蓝3"现在是默认主题。除非用户设置了另一个主题,否则所有窗口都将使用此主题进行着色
- 移除了强制Mac使用灰色的代码
- 新元素.set_cursor - 现在可以为任何元素设置光标。传入一个光标字符串,鼠标悬停在小部件上时将出现光标
- 组合框 - 允许设置为任何值,而不仅仅是列表中的值
- 组合框 - 修改了设置初始值的方式
- 可以通过在TabGroup中设置字体参数来更改标签页上的字体
- 表格标题字体现在默认正确
- 树标题字体现在默认正确
- 将DebugWin重命名为_DebugWin以阻止使用
4.15.0 PySimpleGUI 08-Jan-2020
动态窗口布局!使用Window.extend_layout
扩展您的布局。许多修复
- Window.extend_layout
- Graph.change_coordinates - 对Graph元素实时更改坐标系
- theme_text_element_background_color - 新功能以公开此设置
- 单选按钮和复选框的颜色已更改,使其比背景更亮或更暗
- 进度条 - 允许值更新大于最大值
- 输出元素现在执行删除操作,以便进行清理。因此可以在多个窗口中使用它
- DrawArc (draw_arc) - 新增宽度/线宽参数
- RGB进行更多错误检查,转换类型
- 对find element提供更多描述性的错误信息
- popup_error现在内部使用时设置keep on top
- Element Re-use措辞已更改,以便在检测到重用时明确指出元素是问题而不是布局
- Window.Close (Window.close) - 修复了在Linux上点击"X"时无法立即看到窗口消失的问题
- Window.BringToFront (bring_to_front) - 在Windows上,需要使用topmost来将窗口带到前台而不是提升
- 多行滚动条 - 移除了滚动条颜色。它在Windows上不起作用,因此保持一致
- 更改了创建调试窗口的方式。现在使用finalize而不是读取非阻塞
- 修复了由于X关闭调试窗口而导致主窗口也关闭的问题
- 将外观和感觉表中的所有"black"和"white"更改为#000000和#FFFFFF
- 为内部使用添加了新的颜色处理函数(hsl和hsv相关)
- popup - 扩展了自动换行功能,以包含\n的消息
- 测试工具使用更漂亮的颜色来输出事件和值
- _timeit装饰器用于计时函数
4.15.1 PySimpleGUI 09-Jan-2020
快速修补以删除对popup的更改
4.15.2 PySimpleGUI 15-Jan-2020
快速修补以删除f-string以兼容3.5
即将推出
由于端口永远不会真正"完成",因此总会存在重叠的工作。然而,对于PySimpleGUI有基本功能定义。这就是当前正在进行中的端口所追求的目标。
当前的道路是完成这些端口 - Qt(非常接近),Web(相当接近),Wx(并不那么接近)。
PySimpleGUIDroid正在开发中...
除了端口之外,还有与希望将PySimpleGUI带入课堂的教育工作者进行的持续工作。一些项目已经开始与教师合作。一项工作是检查一系列教授Python的书籍,并将练习转换为使用PySimpleGUI而不是tkinter或命令行。另一个教育努力是与Circuit Python集成。PySimpleGUI如何融入这个画面尚不清楚。Adafruit即将收到一个板,这应该有助于巩固可能实现的内容。
代码条件
Make it run
Make it right
Make it fast
如果做得正确,这就是成功的秘诀。PySimpleGUI已经完成了“使其运行”的阶段。在许多方面,它离“正确”还很远。这些问题正在被解决。这个模块在历史上一直特别不符合PEP8规范。这是一次学习练习,最终变成了一种针对轻量级问题的相对完整的GUI解决方案。
虽然PySimpleGUI的内部结构有些粗糙,但其公共接口到SDK的定义更为严格,并符合PEP8命名规范。2019年夏季,发布了一套“PEP8绑定”,以确保所有面向外部的接口都遵循PEP8命名。
请仅在PySimpleGUI的GitHub上记录错误和建议!这最终只会使代码变得更强大、更好,这对我们所有人都是好事,对吧?在其他地方记录它们不会使核心开发者和其他PySimpleGUI用户得到帮助。更糟糕的是,你可能会从其他网站得到糟糕的建议,因为目前并没有很多PySimpleGUI专家。
设计
关于PySimpleGUI的设计精神的几点说明。从一开始,这个包就是为了利用Python的能力,目标是编程简便。
单文件 虽然这不是最好的编程实践,但实现的结果是单一的文件解决方案。只需要一个文件,即PySimpleGUI.py。你可以发布这个文件,通过电子邮件发送,并使用一条语句轻松导入。
函数作为对象 在Python中,函数表现得就像对象一样。当你将文本元素放入表单时,你可能有时会调用函数,有时会声明对象。如果你使用“文本”这个词,那么你得到的是一个对象。如果你使用Txt
,那么你调用的是一个返回Text
对象的函数。
列表 当可能时,使用Python强大的列表构造似乎是相当自然的。表单被指定为一系列列表。GUI的每一行都表示为元素列表。
字典 想要以字典的形式查看表单的结果而不是列表?没问题,只需在元素上使用key
关键字即可。对于需要频繁更改许多值的复杂表单,这是消费结果的最佳方式。
你也可以使用键来查找元素。这是在反应另一个元素时更新元素的一种极好方式。调用form.FindElement(key)
以获取元素。
命名/可选参数 这是一个在所有API调用中都有特色的功能,无论是函数还是类。元素通过设置一个或多个可选参数来就地配置。例如,通过设置可选的text_color
参数来选择文本元素的颜色。
tkinter tkinter是Python支持的“官方”GUI。它在Windows、Linux和Mac上运行。由于其普遍性,它被选为第一个目标GUI框架。除了Ubuntu Linux之外,几乎所有Python安装都预装了tkinter。在所有GUI框架中(Qt、WxPython、Kivy等),它是启动和运行“最简单”的。
从PSG项目的开始,tkinter就不是PySimpleGUI唯一的底层GUI框架。它只是一个起点。所有旅程都是从向前迈出一步开始的,选择tkinter是PySimpleGUI众多步骤中的第一步。现在有4个端口正在运行 - tkinter、WxPython、Qt和Remi(Web支持)。
作者 & 所有者
PySimpleGUI组织
本文档以及所有PySimpleGUI代码的版权为2018、2019年PySimpleGUI.org。
将信件发送至PySimpleGUI@PySimpleGUI.com
许可证
GNU Lesser General Public License (LGPL 3) +
致谢
有很多人对这个项目做出了直接和间接的关键贡献。在项目的历史上,多次部署了付费的专业帮助。在软件开发的生命中,这种情况有时会发生。
如果您提供了帮助,我真心希望您觉得得到了适当的感谢。您的贡献得到了认可。如果没有,那么请说些什么……发送一封电子邮件到 comments@PySimpleGUI.org。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
ptoaster-1.0.0.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | f9296a2c88429081e1c2881c91ae80ea0a4a9fc5c896caa25e6156191c6767f7 |
|
MD5 | cc096954eff4e85e8a08ef8396b23c11 |
|
BLAKE2b-256 | bd0f8891a6e4f98486ae9f4700dddfe05e1e0603eff212b57e0c16034646a7a7 |
ptoaster-1.0.0-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 35776d1148268affeff527750af2b14a4db52c63551b9284f839e121db41f2e3 |
|
MD5 | 3b70c57f16280ba33bbaa40ab249596b |
|
BLAKE2b-256 | ac50b67a0628ae501db6a5555591f17c7622ee8db6232982bb8255028ef1f4f3 |