PySimpleGUI 中文手册(常用部分)

window

window = sg.Window("Windows-like program",layout)
window.disappear() # 窗口隐藏
window.reappear() # 窗口展示
window = sg.Window('My window with tabs', layout, font=("宋体", 15),default_element_size=(50,1))  
# 字体为宋体,大小5默认窗口大小为501

可用控件列表

使用方法:直接sg.Text()即可

  • Text # 文本
  • InputText # 单行输入框
  • Button # 按钮
    • FileBrowse # 文件选择,选择多个文件FilesBrowse,保存文件FileSaveAs
    • FolderBrowse # 文件夹选择
    • CalendarButton # 日历选择,必须输入按钮名如'choose date',返回字符串
    • ColorChooser # 颜色选择,如sg.ColorChooserButton(‘颜色选择’),返回RGB元组
  • Combo # 下拉选择菜单,如sg.Combo([‘choice 1’, ‘choice 2’])
  • Checkbox # 复选框。如sg.Checkbox(‘My first Checkbox!’, default=True), sg.Checkbox(‘My second Checkbox!’),返回布尔值
  • Radio # 单选按钮,如sg.Radio(‘My first Radio!’, “RADIO1”, default=True),sg.Radio(‘My second radio!’, “RADIO1”),第一个是显示的字符,第二个是单选按钮所在组,只有在同一组的单选按钮才有排他性,第三个是默认选中,返回布尔值True or False
  • Listbox # 列表框,如sg.Listbox(values=[‘Listbox 1’, ‘Listbox 2’, ‘Listbox 3’]
  • Slider # 滚动条,如sg.Slider(range=(1,500),default_value=222,orientation=’horizontal’),垂直是vertical
  • Multiline # 多行输入框
  • Multi-line Text Output (not on tkinter version)
  • Spin # 一个可以上下调节的控件,像一个简化版的滚动条?如sg.Spin([i for i in range(1,11)], initial_value=1)
  • ProgressBar # 进度条,下面是一个使用案例:
layout = [[sg.Text('A custom progress meter')],
          [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')],
          [sg.Cancel()]]

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()
  • Menu # 菜单
  • ButtonMenu # 菜单按钮
menu_def = [['File', ['Open', 'Save', 'Exit' ]],
            ['Edit', ['Paste', ['Special', 'Normal',], 'Undo'],]]

# 定义布局
layout = [[sg.Menu(menu_def, tearoff=False, pad=(20,1))],
          [sg.ButtonMenu('ButtonMenu',key='-BMENU-', menu_def=menu_def[0])],]

window = sg.Window('My window with tabs', layout)
  • Frame # 框,如下面的代码:
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')]

  • Image # 图片查看,只支持png,gif格式,如sg.Image(r’C:\PySimpleGUI\Logos\PySimpleGUI_Logo_320.png’),不知道为什么我运行这个函数总会有各种问题……
  • 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')]]    
window = sg.Window('My window with tabs', layout)    
  • Output # 输出框,可以使用print()直接打印,下面是一个例子:
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()

基本可用参数:

  • key,指定键名
  • size=(8,6),控件大小
  • font = ('宋体',15),字体,前者是字体类型,后者是字体大小
  • enable_events,是否触发事件
  • justification='center',居中

内置Button

虽然官方列了很多内置Button,但是测试下来似乎并没有什么特殊效果,只是多了可以直接使用的Button罢了

  • OK
  • Ok
  • Submit
  • Cancel
  • Yes
  • No
  • Exit
  • Quit
  • Help
  • Save
  • SaveAs
  • Open

比如说,你可以直接sg.OK(),也可以sg.Button('OK')

target参数

选择器型控件,如FileBrowse,FilesBrowse,FolderBrowse,FileSaveAs,CalendarButton,ColorChooserButton,会传递选择值给窗口上的另外一个控件,可以是TextInputText或它本身。比如它与输入框在同一行时会传地址给输入框,如[sg.InputText(),sg.FolderBrowse()],可以为输入框加一个visible=False参数隐藏(是隐藏整个输入框)。

那么我想让值传递给指定控件,可以加一个target参数,如:

layout = [[sg.T('Source Folder')],
              [sg.In(key='input')],
              [sg.FolderBrowse(key='_BUTTON_KEY_',target='input'), sg.OK()]]

这样选择的值就会传递给相同key的控件

注意,使用此参数时,就无法获取选择器控件的值了,比如说上面的例子,你就无法print(values['_BUTTON_KEY_'])

popup

popup

简单来说,popup就是一个弹出窗口,执行该函数时,会停止执行当前窗口,直到用户关闭弹出窗口时才会重新执行。

可以输入任意数量的参数,都会转化为字符串并输出。

拥有以下类型的popup:

sg.popup('Popup')  # Shows OK button
sg.popup_ok('PopupOk')  # Shows OK button
sg.popup_yes_no('PopupYesNo')  # Shows Yes and No buttons
sg.popup_cancel('PopupCancel')  # Shows Cancelled button
sg.popup_ok_cancel('PopupOKCancel')  # Shows OK and Cancel buttons
sg.popup_error('PopupError')  # Shows red error button
sg.popup_timed('PopupTimed')  # Automatically closes
sg.popup_auto_close('PopupAutoClose')  # Same as PopupTimed

比如popup_ok是一个带有ok按钮的弹出窗口,popup_timed是一个过一段时间自动关掉的弹出窗口。

popup中可以输入的参数,自行help(sg.popup),需要注意的一点是因为popup会把所有输入的参数都当做字符串输出,所以特殊的参数需要标识出来,比如sg.popup('values[0],values[1],title="test"')

popup_scrolled

还有一类特殊的popup,即Scrolled Output,它展示的是带有滚动条的弹出窗口,适用于展示大量信息时,函数名为sg.popup_scrolled()

popup_scrolled会自动调整大小,如果想自定义的话,可以sg.popup_scrolled(my_text, size=(80, None))

上述代码会展示一个宽度为80字符,高度随输出字符串变化的弹出窗口。

效果

popup_get_file

获取一个或多个文件地址

# 例子:
text = sg.popup_get_file('Please enter a file name')

效果:

特殊参数:

save_as=False,是否显示保存按钮,multiple_files=False是否允许选择多个文件,no_window=False是否跳过弹出窗口直接显示系统打开文件界面?

popup_get_folder

即获取文件夹路径

注意,该函数没有save_as=Falsemultiple_files=False参数,但是有no_window=False

主题theme

theme_name_list = sg.theme_list() # 获取所有可用主题,返回一个列表
sg.theme_previewer() # 在layout中添加此函数,运行时会展示所有主题的预览

下面代码创造了一个主题浏览器,可以用下拉餐单切换预览所有主题

sg.theme('Dark Brown')
layout = [[sg.Text('Theme Browser')],
          [sg.Text('Click a Theme color to see demo window')],
          [sg.Listbox(values=sg.theme_list(), size=(20, 12), key='-LIST-', enable_events=True)],
          [sg.Button('Exit')]]
window = sg.Window('Theme Browser', layout)

while True:  # Event Loop
    event, values = window.read()
    if event in (None, 'Exit'):
        break
    sg.theme(values['-LIST-'][0])
    sg.popup_get_text('This is {}'.format(values['-LIST-'][0]))

window.close()

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
讨论数量: 17

event, values = window.read(timeout=10)。请问下这一句是什么意思呢?

2年前 评论
like_like 2年前
Jason990420 2年前

请教一下怎么调整元素的位置啊?如文本位置:x=40,y=30

2年前 评论
Jason990420 2年前

请问SimpleGUI写的窗口内容太长,全屏也放不下,怎么设置滚动条呀?

2年前 评论
Jason990420 2年前
chen_chen99 (作者) 2年前

请问菜单和菜单按钮的案例,怎么运行后没有弹出窗口

2年前 评论
Jason990420 2年前
Jason990420

请问菜单和菜单按钮的案例,怎么运行后没有弹出窗口

window = sg.Window('My window with tabs', layout)

该代码只生成sg.Window的实例, 并没有建立窗口, 必需加入选项 finalize=True, 或者有调用 window.read() 才会开始真正生成窗口.

完整范例

import PySimpleGUI as sg

font = ("Courier New", 11)
sg.theme("DarkBlue3")
sg.set_options(font=font)

menu_def = [
    ['&File',    ['&Open', '&Save', '&Properties', 'E&xit']],
    ['&Edit',    ['&Paste', ['Special', 'Normal', ], 'Undo'], ],
    ['&Toolbar', ['---', 'Command &1', 'Command &2', '---', 'Command &3', 'Command &4']],
    ['&Help', '&About...'],
]

button_menu_def = ['Menu', ['&Pause Graph', 'Menu item::optional_key']]

layout = [
    [sg.Menu(menu_def)],
    [sg.ButtonMenu('Menu', button_menu_def)],
]

window = sg.Window("test", layout, size=(240, 180), finalize=True)

while True:
    event, values = window.read()
    if event in (sg.WINDOW_CLOSED, 'Exit'):
        break
    print(event, values)
window.close()

file

2年前 评论

你好,这个请问,PySimpleGUI 系统托盘没看到有介绍。这个应该怎样才能实现?

2年前 评论
Jason990420

方式一

原有的系统托盘并不是真正的系统托盘, 其使用方式类以sg.Window的调用, 调用方式为 sg.SystemTray

范例代码 1


方式二

需要安装 psgtray

pip install psgtray

范例代码 2

2年前 评论

已解决,谢谢,sg.Drop(teachers,default_value=)是这个

1年前 评论
Jason990420 1年前
watermelon6666 (作者) 1年前

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