pysimplegui之元素简单介绍(元素值得获取修改,key的规范及特殊用法)

重点

1获取元素的值

Input(key='mykey')

values['mykey']

2通过key查找元素 对象window['key']

3更新元素的值

window['key'](要更新的值)

window['key']。update()

4

假设您有一个带有输入元素网格的窗口。您可以使用它们的行和列位置作为键(元组)

key=(row, col)

然后,当您读取values从调用返回给您的变量时,变量中的Window.read()values将是您用于创建元素的任何内容。在这种情况下,您会将值读取为: values[(row, col)]

5key的规范

大多数时候,它们是简单的文本字符串。在演示程序中,键按以下约定编写:( _KEY_NAME_下划线开头和结尾全部大写字母)或最近的约定是在开头和结尾使用破折号(例如'-KEY_NAME-')。您不必遵守约定,但遵守约定也不错,因为其他用户已经习惯了这种格式,并且在使用元素键时很容易发现。

正文

 

您将在文档的“调用参考”选项卡中找到有关元素和所有其他类和函数的信息。

“元素”是用于创建窗口的构建块。一些 GUI API 使用术语“Widget”来描述这些图形元素。因此,当引用 PySimpleGUI元素与底层 GUI 框架的Widget时,就很清楚了。PySimpleGUI 元素映射到 GUI 框架小部件,通常以一对一的方式。例如,文本元素是在 tkinter 中使用标签小部件实现的。

Tkinter 端口中的元素表

PySimpleGUI 的每个端口都有一组核心元素以及特定于端口的元素。一些特定于端口的元素包括 Qt 端口中的 Dial 元素和 tkinter 端口中的 Pane 元素。

元素名称 别名 tkinter 小部件 描述
文本 T,文本 tk.标签 一行或多行文本
输入 我,在,输入文本 tk.Entry 单行文本输入
组合 DD, Drop, DropDown, InputCombo    
选项菜单 输入选项菜单    
多行 ML, 多线    
输出      
收音机 R,拉德    
复选框 CB、CBox、检查    
旋转 Sp    
按钮 B, Btn    
图片 我是    
帆布      
柱子 科尔    
框架 神父    
标签      
选项卡组      
窗格      
图形 G    
滑块 SL    
列表框 LB, LBox    
菜单 菜单栏,菜单栏    
菜单栏自定义      
按钮菜单 BM, B菜单    
标题栏      
进度条 PBar, Prog, 进展    
桌子      
     
垂直分隔符 VSep, VSeparator    
水平分隔符 HSep,HS分离器    
状态栏 酒吧    
尺寸握把 SGrip    
P,拉伸    
副推 副总裁,VStretch    
尺寸测量仪      

布局辅助函数

您的窗口布局由元素列表组成。除了元素之外,这些布局帮助功能也可能出现在布局定义中

布局助手 描述
别针 将元素“固定”到布局中的某个位置。如果元素从不可见过渡到可见,则 pin 确保元素位于正确的位置
顶部 将元素或元素行垂直对齐到行的顶部
底部 将元素或元素行垂直对齐到行的底部
中心 将元素或元素行垂直对齐到行的中心
  • 文本
  • 单线输入
  • 包括以下类型的按钮:
    • 文件浏览
    • 文件夹浏览
    • 日历选择器
    • 日期选择器
    • 阅读窗口
    • 关闭窗口(“按钮”和所有快捷按钮)
    • 即时的

钥匙

在 PySimpleGUI 中,键是一个非常重要的概念。

如果你打算用你的 GUI 做任何超出基本东西的事情,那么你需要了解键。

您可以将“键”视为元素的“名称”。或“标识符”。这是您使用 PySimpleGUI 库识别和讨论元素的一种方式。它与字典键完全相同。它们对于窗口必须是唯一的。

key使用参数创建元素时指定键。

键的使用方式如下: * 创建元素时指定 * 作为事件返回。如果一个元素导致一个事件,它的键将被使用 * 在values从返回的字典中window.read() * 进行更新(更改),到窗口中的元素

在您将键放入元素的定义中后,从中返回的值window.read将使用该键告诉您该值。例如,如果您的布局中有一个输入元素:

Input(key='mykey')

你的阅读看起来像这样: event, values = Read()

然后要从读取中获取输入值,它将是: values['mykey']

如果要对元素调用 Update,也可以使用相同的键。请参阅更新元素部分以了解该用法。要在给定元素键的情况下查找元素对象,可以调用 window 方法find_element(也写FindElement为 , element),也可以使用更常见的查找机制:

window['key']

虽然您经常会在本文档的示例中看到以字符串形式编写的键,但要知道键可以是ANYTHING

假设您有一个带有输入元素网格的窗口。您可以使用它们的行和列位置作为键(元组)

key=(row, col)

然后,当您读取values从调用返回给您的变量时,变量中的Window.read()values将是您用于创建元素的任何内容。在这种情况下,您会将值读取为: values[(row, col)]

大多数时候,它们是简单的文本字符串。在演示程序中,键按以下约定编写:( _KEY_NAME_下划线开头和结尾全部大写字母)或最近的约定是在开头和结尾使用破折号(例如'-KEY_NAME-')。您不必遵守约定,但遵守约定也不错,因为其他用户已经习惯了这种格式,并且在使用元素键时很容易发现。

如果您有一个元素对象,要找到它的键,请访问该.Key元素的成员变量。这假设您已经在变量中获得了元素。

text_elem = sg.Text('', key='-TEXT-')

the_key = text_elem.Key

默认键

如果您未能在元素上放置键,则会自动为您创建一个键。

对于Buttons,按钮上的文本是该按钮的键。Text元素将默认为文本的字符串(当启用事件并单击文本时)

如果元素是输入元素之一(将导致在返回值字典中生成条目)并且您未能指定一个,则将为其分配一个以数字 0 开头的数字。效果将如下如果即使使用字典,值也表示为列表。

菜单项也可以有与之关联的键。有关这些特殊键的更多信息,请参阅菜单部分。它们与元素键不同。像所有元素一样,菜单元素具有这些元素键之一。各个菜单项键不同。

WRITE_ONLY_KEY 修饰符

有时您有Multiline用作输出的输入元素(例如 )。这些元素的内容可能会变得很长。您不需要“读取”这些元素,这样做可能会不必要地返回大量数据。

要告诉 PySimpleGUI 您不希望元素在Window.read被调用时返回值,请将字符串添加WRITE_ONLY_KEY到您的键名中。

如果您的Multiline元素最初是这样定义的:

sg.Multiline(size=(40,8), key='-MLINE-')

然后要关闭该元素的返回值,该Multiline元素将这样编写:

sg.Multiline(size=(40,8), key='-MLINE-' + sg.WRITE_ONLY_KEY)

Key Errors - 关键错误恢复算法

在 PySimpleGUI 的主要 (tkinter) 端口中,从版本 4.27.0 开始(尚未在 PyPI 上......但在 GitHub 上作为 4.26.0.14+ 可用)

现在有 3 种对关键错误处理的控制和一个全新的关键报告时代。

SUPPRESS_ERROR_POPUPS = False
SUPPRESS_RAISE_KEY_ERRORS = False
SUPPRESS_KEY_GUESSING = False

您可以通过调用来修改这些值set_options

    sg.set_options(suppress_raise_key_errors=False, suppress_error_popups=False, suppress_key_guessing=False)

它们的基本定义是: suppress_error_popups- 禁止在 PySimpleGUI 本身中生成的错误弹出窗口不显示 suppress_raise_key_errors- 如果未找到密钥或紧密匹配,则禁止引发密钥错误 suppress_key_guessing- 如果您有密钥错误,则禁止密钥猜测算法

保留定义的默认值(全部False),这是关键错误的工作方式。

这是本例中使用的程序:

import PySimpleGUI as sg

def main():
    sg.set_options(suppress_raise_key_errors=False, suppress_error_popups=False, suppress_key_guessing=False)

    layout = [  [sg.Text('My Window')],
                [sg.Input(k='-IN-'), sg.Text(size=(12,1), key='-OUT-')],
                [sg.Button('Go'), sg.Button('Exit')]  ]

    window = sg.Window('Window Title', layout, finalize=True)

    while True:             # Event Loop
        event, values = window.read()
        print(event, values)
        if event == sg.WIN_CLOSED or event == 'Exit':
            break
        window['-O U T'].update(values['-IN-'])
    window.close()

def func():

    main()

func()

有几点需要注意:

  • 调用了多个级别的函数,而不仅仅是一个平面程序
  • 明确定义了 2 个键,此时两者都是文本(我们稍后会更改它们)
  • 有 2 个查找发生,一个与window另一个values

此键错误恢复算法仅适用于用于在窗口内查找键的元素键。键查找是一个普通的字典,因此该values查找没有做任何花哨的事情。

 

上一篇:OpenGL使用纯VBO方式渲染出三角形,非VAO


下一篇:123