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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!