python笔记PySimpleGUI图形界⾯9-构建⾃定义窗⼝
构建⾃定义窗⼝
整理 PySimpleGUI 官⽅⽹站
原⽂google翻译过来的
老师为什么
如果使⽤诸如PyCharm之类的IDE,将会发现使⽤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
同步/异步Windows
PySimpleGUI的最常见⽤途是显⽰和收集⽤户信息。最简单的⽅法是使⽤“阻⽌” GUI调⽤。在等待⽤户
关闭GUI窗⼝/对话框时,执⾏
被“阻⽌”。
上⾯您已经看到了许多使⽤阻⽌窗⼝的⽰例。如果Read调⽤没有超时参数,您将知道它会阻塞。
阻塞读取(等待事件发⽣的读取)如下所⽰:
event, values = ad()
⾮阻塞/异步读取调⽤如下所⽰:
event, values = ad(timeout=100)
哮喘喷雾
您可以在本⽂档末尾了解有关这些异步/⾮阻塞窗⼝的更多信息。吃什么可以
主题-Windows⾃动着⾊
在2019年12⽉,该功能change_look_and_feel被替换为theme。概念保持不变,但是⼀组新的函数调⽤使管理颜⾊和其他设置变得容易得多。
默认情况下,PySimpleGUI颜⾊主题为now Dark Blue 3。“系统默认值”灰⾊消失了。如果您希望窗⼝没有所有颜⾊,以便系统为您选择颜⾊(灰⾊),则将主题设置为’SystemDefault1’或Default1。
有130个主题。您可以通过调⽤预览这些主题,theme_previewer()这将创建⼀个LARGE窗⼝,显⽰所有可⽤的颜⾊主题。
在撰写本⽂时,这些是您可以使⽤的主题。
歌词找歌曲默认为 Dark Blue 3
在2019年12⽉,所有PySimpleGUI窗⼝的默认设置都从带有蓝⾊按钮的系统灰⾊更改为使⽤带有⽩⾊⽂本的灰蓝⾊的更完整的主题。以前,⽤户被困于选择灰⾊以外的颜⾊主题。现在已经为您完成,⽽不是of您。
如果您正在为此颜⾊主题苦苦挣扎,请添加⼀个呼叫以对其theme进⾏更改。
主题名称公式
您指定的主题名称可以是“模糊的”。⽂本不必与您看到的内容完全匹配。例如,“深蓝⾊3”,“深蓝⾊3”和“深蓝⾊3”都可以使⽤。
快速确定窗⼝最佳设置的⼀种⽅法是简单地使⽤许多不同的主题显⽰窗⼝。添加代码⾏以设置主题- th
eme(‘Dark Green 1’),运⾏代码,查看是否喜欢它,如果不喜欢,请将主题字符串更改为,'Dark Green 2’然后重试。重复直到找到喜欢的东西。
字符串的“公式”为:
Dark Color #
要么
Light Color #
颜⾊可以是蓝⾊,绿⾊,⿊⾊,灰⾊,紫⾊,棕⾊,蓝绿⾊,红⾊。#是可选的,也可以是1到XX。⼀些颜⾊有很多选择。例如,有13
种“浅棕⾊”选择。
“系统”默认设置-⽆颜⾊
如果您不愿意在窗⼝中使⽤任何颜⾊,请选择Default 1或System Default 1。
如果您想要蓝⾊按钮的原始PySimpleGUI配⾊⽅案以及其他所有灰⾊,则可以使⽤主题Default或Syst
em 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⽅法要求您在调⽤⽅法之前先调⽤ad或Window.Finalize(或finalize=True在Window调⽤中设置)。这是因为这两个调⽤实际上是使⽤基础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)
元素⼤⼩
设置元素⼤⼩的⽅法有多种。他们是:
1. 全局默认⼤⼩-使⽤SetOptions功能更改
2. 在窗⼝级别-使⽤default_element_size调⽤中的参数进⾏更改Window
3. 在元素级别-每个元素都有⼀个size参数
元素⼤⼩以字符为单位(有例外)。⽂本元素 size = (20,1)的⼤⼩为20个字符,宽1个字符。
PySimpleGUI的默认元素⼤⼩为(45,1)。
有⼏个⼩部件,其中⼤⼩值之⼀是像素⽽不是字符。这对于进度表和滑块是正确的。第⼆个参数是像素的“⾼度”。
没有标题栏
如果您希望创建没有窗⼝标题栏的⼲净美观的窗⼝,请在创建窗⼝时使⽤no_titlebar选项。
确保为您的⽤户提供“退出”按钮,否则他们将⽆法关闭窗⼝!如果没有启⽤标题栏,则该任务栏上的窗⼝将没有任何图标。没有退出按钮,您将需要通过taskmanager杀死…这很不好玩。
没有标题栏的Windows依赖于“随处抓取”选项来启⽤,否则您将⽆法移动窗⼝。
不带标题栏的Windows可⽤于轻松创建浮动启动器。
Linux⽤户!请注意,此设置对其他⼀些元素有副作⽤。多⾏输⼊根本不起作⽤,例如,因此,请谨慎使⽤。
随处抓
这是PySimpleGUI独有的功能。
注意-如果⽤户使⽤启⽤了grap_anywhere的按钮关闭⾮阻塞窗⼝,则会打印⼀条警告消息。这些消息没有危害,但可能会使⽤户感到困扰。如果您希望启⽤⾮阻塞窗⼝,则在创建窗⼝时只需获取grab_anywhere = True。
总在最前⾯
要将窗⼝保持在屏幕上所有其他窗⼝的顶部,请在创建窗⼝时将keep_on_top = True设置为True。此功能使浮动⼯具栏⾮常有⽤,并且始终在桌⾯上可见。
焦点
PySimpleGUI将为您设置默认的焦点位置。这通常表⽰第⼀个输⼊字段。您可以将焦点设置为特定元素。如果要⾃⾏设置焦点,则应通过u_default_focus=Fal在Window调⽤中进⾏设置来关闭⾃动焦点。
TTK按钮
从版本4.7.0开始,PySimpleGUI⽀持“常规” tk按钮和ttk按钮。需要进⾏此更改,以便Mac⽤户可以在按钮上使⽤颜⾊。尝试更改按钮颜⾊时,有⼀个错误会导致tk按钮不显⽰⽂本。请注意,如果从官⽅Python站点⽽不是使⽤Homebrew安装Python,则此问题将消失。切换后,即使tk Button在Mac上也可以使⽤,因此许多⽤户已经切换并⾮常满意。
默认情况下,使⽤按钮元素时,Mac⽤户将获得ttk按钮。所有其他平台将获得正常的tk Button。有⼀些⽅法可以覆盖此⾏为。⼀种是
u_ttk_buttons在创建窗⼝时使⽤参数。如果设置为True,则窗⼝中的所有按钮均为ttk按钮。如果设置为Fal,则所有按钮均为普通tk 按钮。如果未设置,则平台或按钮元素确定使⽤哪个。
如果需要系统范围的设置,则可以使⽤设置默认值t_options。这将影响所有窗⼝,例如弹出窗⼝和调试窗⼝。
TTK主题
tkinter具有许多可与ttk⼩部件⼀起使⽤的“主题”。在PySimpleGUI中,这些⼩部件包括-表格,树,组合框,按钮,ProgressBar,选项卡和TabGroup。有些元素具有“主题”参数,但不再使⽤,应将其忽略。PySimpleGUI的初始发⾏版试图在单个窗⼝中混合主题,但是由于已经了解到这是不可能的,因此可以在Window或系统级别进⾏设置。
如果需要系统范围的设置,则可以使⽤设置默认值t_options。这将影响所有窗⼝,例如弹出窗⼝和调试窗⼝。
ttk主题选择取决于平台。Linux的选择数量少于Windows。这些是Windows选项:“默认”,“ winnative”,“蛤”,“ alt”,“经典”,“ vista”,“ xpnative”
定义了⼀些常量来帮助您完成代码,以确定您的选择。主题常量以开头THEME_。例如,“蛤”主题是THEME_CLAM
强烈建议您尝试使⽤此设置来确定最喜欢的设置。他们以微妙但仍然有意义的⽅式更改了基于ttk的元素。
关闭视窗
完全完成⼀个窗⼝后,应将其关闭然后删除,以便正确清理资源,尤其是tkinter资源。
如果您希望在⼀⾏代码中执⾏此操作,请在下⾯⼀⾏:
window.clo();del window
删除有助于解决多线程应⽤程序遇到的问题,其中tkinter抱怨它是从错误的线程(不是程序的主线程)调⽤的
完成窗⼝形成的窗⼝⽅法
完成布局制作后,将其存储layout在这些⽰例中称为的变量中,即可创建窗⼝。
窗⼝的创建部分涉及3个步骤。
1. 创建⼀个Window对象
2. 将布局添加到窗⼝
3. 可选-如果要在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)
让Window初始化代码为您完成这项⼯作,⽽不是将⼯作推给进⾏布局和完成调⽤的⽤户。是的,现在听起来似乎很明显,但是⼏个⽉前还没有。
此功能已添加到所有4个PySimpleGUI端⼝,但PyPI上均未添加此功能,因为⾸先需要⼀些运⾏时以
确保不会发⽣真正的不良情况。
调⽤以设置窗⼝布局。必须在之前调⽤Read。最有可能与Window的创建“链接”。
window = sg.Window('My window title', layout)