PySimpleGUI 学习笔记(纯新手记录,大神请忽视)

学习 Python 主要是开发一些小工具方便工作,代替人工做重复性的工作。开发完后发给同事使用,由于他们电脑没有开发环境所以打包成 exe 文件,默认的界面比较丑,所以学习 GUI 的内容。

安装#

pip 安装 PySimpleGui 库

pip install PySimpleGUI

小例子#

import PySimpleGUI as sg

# 窗口内的所有控件.
layout = [ [sg.Text('Some text on Row 1')],
            [sg.Text('Enter something on Row 2'), sg.InputText()],
            [sg.Button('Ok'), sg.Button('Cancel')] ]

# 生成窗口
window = sg.Window('Window Title', layout)
# 消息处理和输入消息接收
while True:
    event, values = window.read()
    if event in (None, 'Cancel'): 
        break
    print('You entered ', values[0])

window.close()

PySimpleGUI 学习笔记

event 和 Values 详解#

当执行 window.read() 函数时,将会返回一个 (event,values) 元组。event 是事件,它可能是一个按钮的按下、列表项的选择等,比如我设置了一个 sg.Submit('提交') 按钮,那么 event 返回的是'提交'。如果我什么也不填,sg.Submit(),那么返回默认值'Submit',当然界面上显示的也是 Submit。如果用户点击右上角 X 关闭窗口,则是 None

注意,默认情况下只有 Button 才能触发事件,然后执行 window.read (),也就是说返回的 event 始终是 button 名。但是如果你给控件加上一个 enable_events=True 参数,那么点击任何控件都可以触发事件了,比如说 sg.Text (‘My one-shot window.’,enable_events=True),那么点击文本也可以触发事件。

values 是一个包含所有输入元素的值的字典。字典使用键来定义词条。如果你的元素没有特定的键,系统为你提供一个键。这些自动编号的键是以 0 开始的。

比如说我有两个输入框,则第一个输入框的值是 values [0],第二个输入框的值是 values [1]

举个栗子:

import PySimpleGUI as sg      

layout = [[sg.Text('My one-shot window.')],      
                 [sg.InputText()],      
                 [sg.Submit(), sg.Cancel()]]      

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

event, values = window.read()    

window.close()
text_input = values[0]    
sg.popup('You entered', text_input) # 弹出窗口

如果你想使用自定义 key?很简单,相应位置修改为以下代码:

sg.InputText(key='-IN-')
text_input = values['-IN-']
print(text_input)

如何更新数据?#

下面是一个例子,使用 window[index].update(指定值) 的方法,可以更新 key 为 index 控件的值,当然,指定值可以是另外一个控件的值,一个例子如下:

layout = [[sg.Text('Your typed chars appear here:'), sg.Text(size=(15,1), key='-OUTPUT-')],
          [sg.Input(key='-IN-')],
          [sg.Button('Show'), sg.Button('Exit')]]

window = sg.Window('Pattern 2B', layout)

while True:  # Event Loop
    event, values = window.read()
    print(event, values)
    if event in  (None, 'Exit'):
        break
    if event == 'Show':
        # Update the "output" text element to be the value of "input" element
        window['-OUTPUT-'].update(values['-IN-'])

window.close()

PS:《手册》中会介绍一个 target 参数

感谢:www.sitstars.com/archives/82/ 大部分转载于此篇文章

本作品采用《CC 协议》,转载必须注明作者和本文链接