龙空技术网

Python学习笔记 | 使用PySimpleGUI模块开发图形用户界面(完整)

知者不惑FYK 7870

前言:

现时小伙伴们对“c语言人机界面”大体比较着重,咱们都需要知道一些“c语言人机界面”的相关知识。那么小编也在网摘上网罗了一些对于“c语言人机界面””的相关文章,希望大家能喜欢,朋友们一起来学习一下吧!

一、用户界面及图形用户界面库简介

1、用户界面简介

用户界面分为命令行用户界面和图形用户界面,是人机交互的重要手段。

命令行用户界面:Command line User Interface(简称CUI),一般不支持鼠标,需要通过键盘输入指令,例如Windows系统的终端命令窗口、Python的运行和控制台窗口等。图形用户界面:Graphical User Interface(简称GUI), 允许用户使用鼠标和键盘点击选择图标和菜单项,来完成启动程序、执行命令和操作文件等日常事务,例如Windows系统界面。

很显然,图形用户界面要比命令行用户界面更直观、操作更便捷,所以开发完整的Python项目必须要设计一个功能完备并且漂亮的图形界面。

2、常用图形用户界面库简介

Python中常用的图形用户界面库有Thinker、PyQt、PySide2、WxPython和PySimpleGUI等,各具特色,下面简单介绍一下。

Thinker:Python官方自带的图形界面库

优点:不需要安装,导入就可以使用;语法结构简单,易于掌握。

缺点:没有界面设计器概念,所有控件的尺寸和位置调整都需要使用语句重复罗列,代码冗长,尤其不利于后期调整及维护。PyQt:第三方公司开发的图形界面库

优点:拥有QT设计器,可以通过可视化方式创建界面,拖拉控件即可完成界面设计。

缺点:PyQt不是Python官方开发的,因此商业化应用受到一定限制,必须遵守开源协议即GPLv3许可证。简单的说就是项目交付给甲方时需要附带源代码,它的替代产品是PySide2。二者功能和语法几乎相同,但是PySide2是Python官方开发的,因此使用时不受限制。另外,PyQt设计界面生成的代码量比较大。WxPython:采用c++编写的第三方库,也是主流图形用户界面库之一。PySimpleGUI:封装了多个图形界面库的模块,功能强大,使用前需要安装。

优点:PySimpleGUI体系封装了Thinker、Qt、WxPython和Remi,因此可以获得所有的控件元素,例如按钮、弹窗、滑块和下拉菜单等;在布局设计上,采用了更简单更人性化的方法,代码量非常少,易于后期维护;另外,PySimpleGUI使用了比较宽松的公共许可证——LGPL 3。二、PySimpleGUI模块基本应用

1、基本步骤

导入库:import PySimpleGUI as sg,简写sg是约定成俗的写法定义布局layout:layout是一个二维列表,外层列表里面包含多个内层列表,每个内层列表就是图形用户界面上的一行,包含这一行的所有控件定义创建窗口对象:使用PySimpleGUI的Window类创建一个窗口对象,参数包括窗口标题、布局layout等事件循环:利用while True进行无限循环,避免窗口一闪即关,同时反复读取窗口对象的事件和数据,然后进行判断处理关闭窗口对象:使用close方法变比窗口对象,释放资源

模版代码如下:

# 导入库import PySimpleGUI as sg# 定义布局layout = [    [sg.Text('请输入学生信息:')],  # 窗口第一行只有一个文本框,文本框语句可以简写成sg.T    [sg.Text('姓名'), sg.InputText()],  # 第二行有一个文本框和一个文本输入框,文本输入框语句可以简写成sg.In    [sg.Text('性别'), sg.InputText('男')],  # 第三行同上,文本输入框语句可以有默认值    [sg.Button('确定'), sg.Button('取消')]  # 第四行有两个按钮,按钮语句可以简写成sg.B]# 创建窗口对象,窗口标题是“图形窗口模版”,把布局列表layout传进去window = sg.Window('图形窗口模版', layout)# 主程序体,事件循环while True:  	# 循环读窗口,把发生的事件和输入的数据赋值给event和values    # values是一个字典,默认key是从0开始的数字序列    event, values = window.read()    # 判断确定按钮事件,输出文本输入框的内容    if event == '确定':        print(values)    # 判断窗口关闭按钮事件,退出循环。    # 窗口关闭事件的检测是必须要有的,否则就是点击窗口上的关闭按钮也不起作用。    # 如果用鼠标点击窗口的关闭按钮,事件就是None    if event  == None:        break# 关闭窗口对象window.close()

注意:所有控件都是调用的类,因此首字母都是大写的,例如sg.Text,窗口对象同样。

运行结果:

2、相关内容扩展

# 导入库import PySimpleGUI as sg# 定义布局layout = [    # enable_events参数是设置是否允许该组件产生事件    # 参数key是组件的关键字,设置key后,在取窗口事件和数据时就可以写成event==key值和values[key值]的形式    # 设置key,看着更直观,不容易出错。另外如果窗口组件过多,再用索引值取窗口数据内容就不方便记忆    [sg.Text('请输入学生信息:', key='-Msg-', enable_events=True)],    [sg.Text('姓名'), sg.InputText(key='-In_Name-')],  # key值'-In_Name-'是约定成俗的写法,有助于区分,一般单词第一个字母大写    [sg.Text('性别'), sg.InputText('男')],    [sg.Button('功能1'), sg.Button('功能2'), sg.Button('1-内容'), sg.Button('2-内容')],    [sg.Button('确定'), sg.Button('取消')]]# 创建窗口对象window = sg.Window('图形窗口模版', layout)# 主程序体,循环while True:    event, values = window.read()    # 由于“请输入学生信息”文本框参数enable_events=True,所以单击后就会产生事件		# 这里使用layout里定义的key来识别更方便    if event == '-Msg-':        sg.popup('请输入学生信息')  # 弹窗信息    # 确定按钮事件,弹窗输出文本输入框的内容    # 读取窗口得到的返回值values是一个字典,默认要这样取值:values[0]、values[1]……    # 如果窗口组件太多,用序号取值很不直观,可以使用在layout里定义的key来取值    if event == '确定':        sg.popup('学生姓名是:', values['-In_Name-'])    # 事件以XX开头    if event.startswith('功能'):        sg.popup('您点击了功能**按钮!')    # 事件以XX结尾    if event.endswith('内容'):        sg.popup('您点击了**内容按钮!')    # 判断窗口关闭和点击取消按钮事件,退出循环    if event in (None, '取消'):  # 也可以写成(sg.WIN_CLOSED, '取消')        break# 关闭窗口对象window.close()

3、Window类属性

Window(   title,   # 窗口标题设定    layout=None,    # 布局设定    location=(None, None),    # 默认窗口出现的位置    size=(None, None),    # 窗口宽高设定    element_padding=None,    # 元素间间隔设定    button_color=None,    # 按钮元素颜色设定(文本颜色,背景颜色)    font=None,    #(字体名称,字体大小)    background_color=None,    # 背景颜色设定    auto_close=False,    # 界面自动关闭设定    auto_close_duration=3,    # 默认为3秒,自动关闭前界面持续打开时间    no_titlebar=False,    # 界面无标题栏设定    grab_anywhere=False,    # 拖拽窗口设定。    keep_on_top=False,    # 如果为True,界面保持在屏幕的最前方    resizable=False,    # 如果为True,界面生成后可以调整大小    disable_close=False,    # 如果为True,窗口关闭按钮将不起作用    disable_minimize=False,    # 如果为True,窗口最小化按钮将不起作用    right_click_menu=None,    # 右击调出菜单    transparent_color=None,    # 界面透明设定 =sg.theme_background_color()    element_justification="left",    # 元素对齐方式设定。有效值 left,right,center      )

4、自定义主题

PySimpleGUI模块自带了上百套主题,主题里预定义了窗口背景颜色、字体颜色、组件边框效果等等,可以使用相应语句预览主题和打印有效主题名称列表。

预览主题

输入如下代码:

import PySimpleGUI as sgsg.theme_previewer()

运行效果如下图:

PySimpleGUI模块预定义主题

默认主题是:Dark Blue 3,即深蓝 3。

获取有效主题名称

上面输出的主题预览图里的主题并不全,并且有些还是无效的,在使用时可以先输出有效主题列表,然后通过复制粘贴就可以很方便的引用了。代码如下:

import PySimpleGUI as sgprint(sg.theme_list())输出结果:['Black', 'BlueMono', 'BluePurple', 'BrightColors', 'BrownBlue', 'Dark', 'Dark2', ……]注:因为列表内容太多,所以这里用省略号代替。
设置主题

格式:sg.theme(主题名称),演示代码如下:

import PySimpleGUI as sgsg.theme('Green')  # 设置主题为'Green'layout = [    [sg.Text('请输入学生信息:')],    [sg.Text('姓名'), sg.InputText()],    [sg.Text('性别'), sg.InputText('男')],    [sg.Button('确定'), sg.Button('取消')]]window = sg.Window('自定义主题', layout)while True:    event, values = window.read()    if event is None:        breakwindow.close()

运行效果如下图:

【技巧】如果设置主题语句的参数为空字符串,即sg.theme(''),则会随机设置主题,每次运行程序主题都不一样,并且在pycharm的运行窗口里还会显示有效主题列表和当前正在使用的主题名称。反复运行程序,发现哪个主题比较相中,就可以在运行窗口里复制粘贴正在使用的主题名称。

运行窗口里的内容如下:(最下面一行后面的DarkTeal11就是当前使用的主题名称)

** Warning -  Theme is not a valid theme. Change your theme call. **valid values are ['Black', 'BlueMono', 'BluePurple', 'BrightColors',……]Instead, please enjoy a random Theme named DarkTeal11
修改预定义主题的局部设置

假设我们相中了一个主题的整体效果,但是对局部设置不太满意,例如字体颜色,那么使用相应语句就可以针对部分设置进行更改。

首先,看一下一个主题包含的内容和相应的值,代码如下:

 'LightGreen3': {'BACKGROUND': '#A8C1B4',               'TEXT': 'black',               'INPUT': '#DDE0DE',               'SCROLL': '#E3E3E3',               'TEXT_INPUT': 'black',               'BUTTON': ('white', '#6D9F85'),               'PROGRESS': DEFAULT_PROGRESS_BAR_COLOR,               'BORDER': 1,               'SLIDER_DEPTH': 0,               'PROGRESS_DEPTH': 0}

以上是一个主题所包含的所有元素及设置,对应的修改这些设置的方法如下:

theme_background_colortheme_border_widththeme_button_colortheme_element_background_colortheme_element_text_colortheme_input_background_colortheme_input_text_colortheme_progress_bar_border_widththeme_progress_bar_colortheme_slider_border_widththeme_slider_colortheme_text_color

这些方法在pycharm里输入语句sg.theme_时就会自动提示,然后设置好相应的值就可以了。假设我对按钮的文字颜色white不满意,现在想修改成黑色black,那么修改语句如下:

sg.theme('LightGreen3') print(sg.theme_button_color())sg.theme_button_color(('black','#6D9F85'))

注:首先设置主题,然后打印输出按钮的颜色,为的是取得按钮的背景颜色,最后修改按钮的文字颜色为black,把背景颜色复制粘贴过来。注意,修改颜色语句的参数是一个元组!

5、自动批量创建组件

对于一些特征相同、数量较多的组件,可以使用列表推导式的方式来自动批量创建,下面分三种形式演示:

横向批量创建按钮组件

import PySimpleGUI as sglayout = [[sg.Button(i) for i in '1234567890']]window = sg.Window('自动批量创建组件', layout)while True:    event, values = window.read()    if event is None:        breakwindow.close()

运行效果:

纵向批量创建按钮组件

layout = [[sg.Button(i)] for i in '1234567890']

注意内层方括号的位置,运行效果:

仿计算器样式创建按钮组件

import PySimpleGUI as sgsg.theme('LightYellow')# 自定义函数,返回带有格式设定的按钮元素,修改这里的参数,所有按钮就都随着改变def cbtn(text):    return sg.B(text, pad=(0, 0), size=(4, 2), font=('宋体', 18))# 定义布局,利用列表推导式配合自定义按钮函数,自动批量创建按钮layout = [    [cbtn(i) for i in '789'],    [cbtn(i) for i in '456'],    [cbtn(i) for i in '123'],    [cbtn(i) for i in '%0.'],]window = sg.Window('批量创建按钮', layout, keep_on_top=True)while True:    event, values = window.read()    print(event)    if event is None:        breakwindow.close()

运行效果:

三、核心组件介绍

图形窗口核心组件的属性很多,但是绝大部分都是共通的,因此这里以文本框为基础进行详细介绍。

1、单行文本框Text

格式:sg.Text(参数),可以简写成sg.T(参数)

详细属性设置(组件都有很多通用属性,设置方法是一样的。这里以单行文本框为例,对所有属性进行详细介绍,后面将不再介绍通用属性,只介绍组件的特殊独有属性)

Text(    text="",                              # str:要显示的文本。可以包含\n以实现多行。    key=None,                             # [str, int, tuple, object]:                # 元素唯一标识符,                 # 书写规范 key='-NMAE-'。用于元素的定位。    size=(None, None),                    # (int, int): 元素宽度,行高    font=None,                  # 设定字体的名称,大小                # font='宋体'                # font=('宋体',int) or font=['宋体',int]    auto_size_text=None,                  # bool: 元素根据文本自动调节大小    enable_events=False,                  # bool: 事件属性,设定为True时,点击文本发生事件。    relief=None,                          # 浮雕设计 'raised','sunken','flat','ridge','solid','groove'    border_width=None,                    # 设定relief时,用来设定边界宽度    text_color=None,                      # 文本颜色    background_color=None,                # 文本背景颜色    justification=None,                   # 对齐方式: 'left','right','center'    pad=None,                     # 元素间隔设定  记住左右上下                        # (int, int) or ((int, int),(int,int))                 #  or (int,(int,int))or ((int, int),int)                # (left/right, top/bottom) or ((left, right), (top, bottom))    right_click_menu=None,                 # 右击调出菜单  List[List[Union[List[str],str]]]                # 设定后,右击此元素可以调出菜单。    grab=False,                            # bool:如果为真,点此元素可以移动拖拽窗口    tooltip=None,                          # str:悬浮文本 ,当光标置于该元素上方,会显示设定的文本。    visible=True                           # bool: 元素可见状态    )
Update方法

Update方法用于在程序中更新文本框设置

格式:window[key].update() 或 window[key].Update()

可用于更新的属性如下:

update(    value=None,            # str 更新文本    background_color=None,            # str 更新文本背景颜色    text_color=None,            # str 更新文本颜色    font=None,            # 更新字体的名称或者大小    visible=None            # 更新元素的可见状态    )
完整设置实例
import PySimpleGUI as sg# 定义文本框需要显示的文本txt = '''今年以来,面对复杂严峻的国内外形势和多重超预期因素冲击,中国经济顶住压力,前三季度国内生产总值(GDP)同比增长3%,在上半年同比增长2.5%的基础上,持续巩固回升态势。'''# 定义右键菜单内容r_menu = ['menu', ['红色文字', '绿色文字', '蓝色文字', '背景颜色', ['白色背景', '黄色背景', '黑色背景']]]# 定义布局layout = [[    sg.Text(        text=txt,        key='-TXT-',        size=(47, 3),        font=('微软雅黑', 12),        auto_size_text=False,        enable_events=False,        relief='raised',        border_width=10,        text_color='blue',        background_color='white',        justification='left',        pad=((4, 4), (8, 8)),        right_click_menu=r_menu,        grab=True,        tooltip='这是文本框!!!',        visible=True)],    [sg.Button('确认', font=(None, 12), size=(20, 2)),     sg.Button('取消', font=(None, 12), size=(20, 2))]]window = sg.Window('自动批量创建组件', layout)while True:    event, values = window.read()    # 更新文字颜色    if event == '红色文字':        window['-TXT-'].update(text_color='red')    if event == '绿色文字':        window['-TXT-'].update(text_color='green')    if event == '蓝色文字':        window['-TXT-'].update(text_color='blue')    # 更新背景颜色    if event == '白色背景':        window['-TXT-'].update(background_color='white')    if event == '黄色背景':        window['-TXT-'].update(background_color='yellow')    if event == '黑色背景':        window['-TXT-'].update(background_color='black')    if event is None:        breakwindow.close()

运行效果:

视频加载中...

2、单行文本输入框InputText

格式:sg.InputText(参数) ,可以简写成sg.In(参数)

特殊属性(非通用属性)

InputText(    default_text='',            # 默认值设定,可以为空字符串。            # Any    disabled=False,            # bool :元素禁用,            # 如果为True则禁用,无法输入任何值。    password_char="",            # 密码字符,一般设置为*    do_not_clear=True,            # bool : 输入框内容不被清除            # 如果为False,一发生事件,该输入框内的值会被清除。    focus=False,            # bool : 设定焦点            # 如果为真,则光标显示在此输入框。    disabled_readonly_background_color=None,            # str: 元素禁用时的背景颜色设定    disabled_readonly_text_color=None,            # str: 元素禁用时的文本颜色设定    )
设置焦点

格式:window[key].SetFocus() 或 window[key].set_focus()

Update方法

update(    value=None,        # str  : 更新输入框内的文本    disabled=None,        # bool : 更新元素的禁用状态        # 如果为True,输入框变成只读状态,无法写入。    select=None,        # bool: 元素选中        # 如果为True,输入框内的文本被全选中。        # 和focus或者set_focus 一起试着使用吧。    visible=None,        # bool : 更新元素的可见状态    text_color=None,        # str : 更新输入框内的文本颜色    background_color=None,        # str : 更新输入框的背景颜色    move_cursor_to="end"        # 光标移动文本的最后。        # 和value,focus 一起试着使用吧。    )

3、多行文本框Multiline

多行文本框既可以做输入又可以做输出使用,当做输出使用时,文本内容可以设置不同颜色、对齐方式等,还可以在不清除原有内容的同时动态更新输出内容,是一个非常好用的组件,用作可视化调测程序也非常方便。

格式:sg.Multiline(参数),可以简写成sg.ML(参数)

特殊属性

Multiline(   default_text="",    # 默认显示的文本        border_width=None,    # 边界线条宽度设定        write_only=False,    # 设定为True时,文本框只提供用户写入,窗口不读取。无返回值。    reroute_stdout=False,    # print语句内容会显示在此文本框内    reroute_cprint=False,    # 使用cprint将内容打印到此文本框内。cprint可以设置输出文本的颜色、背景颜色和对齐方式等    reroute_stderr=False,    # 捕捉异常时将文本写在此元素内. sys.stderr.write('?')    autoscroll=False,    # 如果为True,更多数据添加到末尾时元素的内容将自动滚动        focus=False,    # 焦点设置      do_not_clear=True,    # 默认为True,如果设定为False,窗口读取一次,内容就会自动清除。     )
Update方法
Update(    value=None,    # 更新内容    disabled=None,    # 元素禁用    append=False,    # 如果设定为True,要更新的内容会接在原来文本的下方。原来的文本不会消失。    font=None,    # 字体大小名称设定    text_color=None,    # 文本颜色设定    background_color=None,    # 背景颜色设定    text_color_for_value=None,    # 更新的文本的字体颜色设定    background_color_for_value=None,    # 更新的文本的背景颜色设定    visible=None,    # 元素可见状态更新。默认可见    autoscroll=None,    # 更新文本是否自动滚动。默认不自动滚动    justification=None    # 更新文本对齐方式)
cprint方法
cprint(    args=*<1 or N object>,    # 可变参数,    end=None,    # 结束符  默认为回车键    sep=" ",    # 分隔符 默认为空格键    text_color=None,    # 可以简写成t    background_color=None,    # 可以简写成b    colors=None,    # 可以简写成c    key=None,    #元素的唯一标识符    justification=None    #文本对齐方式)
垂直分割线
sg.VerticalSeparator(    color=None,    key=None,    pad=None    )
实例演示
import PySimpleGUI as sg# 定义布局,多行文本框的 reroute_cprint=True,可以使用cprint方法向多行文本框里输出内容,两个单行文本框设置了内容自动清除layout = [[sg.Multiline(key='-ML-', size=(60, 15), reroute_cprint=True, autoscroll=True)],          [sg.VerticalSeparator(color='black'), sg.InputText(key='-INPUT1-', size=(20, 1), do_not_clear=False),           sg.B('张三'),           sg.VerticalSeparator(color='black'), sg.InputText(key='-INPUT2-', size=(20, 1), do_not_clear=False),           sg.B('李四'),           sg.VerticalSeparator(color='black'), ]]window = sg.Window('多行文本框演示', layout, keep_on_top=True)while True:    event, values = window.read()    print(event, values)    if event is None:        break    if event == '张三':        sg.cprint('张三:', values['-INPUT1-'], c=('red', 'yellow'), justification='l')    if event == '李四':        sg.cprint('李四:', values['-INPUT2-'], t='blue', justification='r')window.close()

运行效果:

视频加载中...

4、按钮Button

格式:sg.Button(参数),可以简写成sg.B(参数)

特殊属性

Button(     image_filename=None,            # 图片路径,按钮用图片表示            # 只支持GIFs和PNGs格式            # 和image_data二选一使用    image_data=None,            # 图片base64格式,按钮用图片显示            # 和image_filename二选一使用    image_size=(None, None),            # 按钮图片大小    image_subsample=None,            # 图片大小设定             # 为2时→原图片的二分之一大小            # 2=1/2, 3=1/3, 4=1/4, etc    disabled_button_color=None,            # 按钮元素禁用时显示的按钮颜色    bind_return_key=False,            # 绑定回车键            # 如果设定为True,回车键会使此元素被点击。        )
Update方法
Update(    text=None,        # 按钮上显示的文本    button_color=(None, None),        # 按钮颜色    disabled=None,        # 元素禁用设定    image_data=None,        # 图片的base64格式    image_filename=None,        # 图片的路径    visible=None,        # 元素可见状态设定    image_subsample=None,        # 元素大小设定    disabled_button_color=(None, None),        # 元素禁用时显示的文本和按钮颜色    image_size=None        # 图片尺寸设定    )
实例演示
import PySimpleGUI as sg# 确定按钮的图片地址start = 'start.png'# 取消按钮的Base64数据,Base64数据的生成方法在实例演示下面介绍end = b'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'layout = [    [sg.T('请输入信息文字:')],    [sg.In(key='-INPUT-', font=(None, 14), size=(40, 1))],    [sg.B(key='-OK-', image_filename=start, image_size=(40, 40), pad=((8, 18), (20, 4)), bind_return_key=True),     sg.B(key='-CANCEL-', image_data=end, image_size=(40, 40), pad=((8, 18), (20, 4)))]]window = sg.Window('图形按钮', layout)while True:    event, values = window.read()    if event == '-OK-':        if values['-INPUT-'] == '':            sg.popup('输入内容不能为空,请重新输入!')        else:            sg.popup(values['-INPUT-'])    if event in (None, '-CANCEL-'):        breakwindow.close()

【注】确定按钮绑定了回车键,在文本输入框输入内容后直接按回车键,就相当于用鼠标点击了确定按钮,弹窗显示文本输入框的内容。

运行效果如下:

在上面的实例中,两个按钮都使用了图片,其中确定按钮采用的是调用磁盘文件的形式,而取消按钮采用了Base64格式数据的形式。Base64是Python支持的一种二进制图片格式,生成后就不再依赖原图片了,所以相比调用图片文件的好处就是不怕因图片丢失而出现错误。Base64格式数据生成方法如下:

import base64file = open('end.png', 'rb')b64 = base64.b64encode(file.read())print(b64)file.close()

这段简单的代码运行后就会输出指定图片的Base64数据,然后复制粘贴到需要用到的地方就可以了。

5、列表Listbox

格式:sg.Listbox(参数),可以简写成sg.LB(参数)

特殊属性

Listbox(    values,            # 列表或者元祖等    default_values=None,            # 默认选中的值或者列表    select_mode=None,            # 选择模式,有效值包含如下4种。            # single  ,单选,更换时点击选择            # multiple  ,可以多选,逐一点击选择            # browse   ,单选,鼠标按住也可以更换选择            # extended  ,可以多选,鼠标按住也可以扩展选择    no_scrollbar=False,            # 如果为True,则没有滚动条    )
Update方法
Update(    values=None,            # 元祖或者列表,举例如下            # values=[1,3]            # values=(1,3)    disabled=None,            # bool : 更新元素是否禁用,举例如下            # disabled=True            # disabled=False    set_to_index=None,            # 高亮显示设定的索引,Union[int, list, tuple],举例如下            # set_to_index=1            # set_to_index=[1,2]            # set_to_index=(1,2)            # 注意!单击只是高亮显示,并未选中。双击才是高亮显示+选中。            # 单击获取值时,不用valuse(key),而是window[key].get()    scroll_to_index=None,            # int : 将设定的索引跳到要显示第一行    select_mode=None,            # 更新元素的选择模式,有效值包含如下4种            # single  ,单选,更换时点击选择            # multiple  ,可以多选,逐一点击选择            # browse   ,单选,鼠标按住也可以更换选择            # extended  ,可以多选,鼠标按住也可以扩展选择    visible=None            # bool: 更新元素的可见状态            # visible=True            # visible=False    )
实例演示
import PySimpleGUI as sg# 创建列表框内容列表list1 = ['黄瓜', '豆角', '土豆', '茄子', '辣椒']list2 = ['苹果', '橘子', '黄桃', '葡萄', '西瓜', '橙子', '柚子', '火龙果']layout = [    [sg.Text('请选购物品:')],    # 列表框默认显示list1的内容,多项选择,默认有滚动条    [sg.Listbox(list1, key='-LB-', size=(20, 5), select_mode='multiple')],    [sg.Button('蔬菜', key='-B1-', size=(8, 1)), sg.Button('水果', key='-B2-', size=(8, 1))],    [sg.Button('清空物品', key='-CLEAR-', size=(18, 1))],    [sg.Button('确认', key='-OK-', size=(18, 1))]]window = sg.Window('列表演示', layout)while True:    event, values = window.read()    # 如果点击了蔬菜按钮,则将list1的内容加载到列表框中    if event == '-B1-':        window['-LB-'].update(list1)    # 如果点击了水果按钮,则将list2的内容加载到列表框中    if event == '-B2-':        window['-LB-'].update(list2)    # 如果点击了清除物品按钮,则将列表框的高亮显示内容清空    if event == '-CLEAR-':        window['-LB-'].update(set_to_index=[])    # 如果点击了确认按钮,则弹窗显示列表框的选择项目(返回值是列表)    # 这里获取高亮显示项目的内容时,要用window[key].get(),而不能用读取窗口的values值    # 因为如果使用set_to_index设定高亮显示项目时,实际上并没有用鼠标点击,虽然相应项目可以高亮显示,但是读取窗口的values值是捕获不到的    if event == '-OK-':        sg.popup('您选购的物品如下:', window['-LB-'].get())    if event is None:        breakwindow.close()

运行效果:

视频加载中...

6、下拉菜单Combo

格式:sg.Combo(参数) 或 sg.InputCombo(参数) 或 sg.DropDown(参数) 或 sg.Drop(参数)

特殊属性

Combo(values,            # List[Any] or Tuple[Any]             # 显示下拉菜单信息,列表或者元祖    default_value=None,            # initial value            # 默认选中    disabled=False,            # 元素禁用状态设定,            # 设定为True时,元素不能进行选择,也不能输入。    readonly=False,            # 元素只读属性,只能选择,不能输入内容。        )
Update方法
update(    value=None,            # 更新默认选中的选项    values=None,            # 更新显示的所有下拉菜单文本    set_to_index=None,            # 高亮显示设定的索引的文本    disabled=None,            # 更新元素的禁用状态    readonly=None,            # 更新元素是否只读    font=None,            # 更新元素的字体名称或者大小    visible=None    )

7、选项菜单OptionMenu

选项菜单OptionMenu的功能与下拉菜单Combo基本相同,只是不支持输入。

格式:sg.Optionmenu(参数)

特殊属性

OptionMenu(  	values,    default_value=None,        )
Update方法
Update(    value=None,    # 更新默认选中的元素    values=None,    # 更新所有显示的文本选项    disabled=None,    # 更新元素的禁用状态    visible=None    # 更新元素的可见状态    )

8、单选框Radiobox

单选框组件可以创建一组选项,然后只能选择其中一项。不知道是Python版本问题还是PySimpleGUI版本问题,我的电脑上只有sg.Radio组件。

格式:sg.Radiobox(参数),可以简写成sg.R(参数)

特殊属性

Radiobox(text,     				# str,选项内容    group_id,   					# 组id		default=Flase,     				# 默认为假,未选中        )
实例演示
import PySimpleGUI as sg# 定义单选框的项目内容列表r_list = ['非常满意', '满意', '一般', '不满意']# 定义选项标题txt1 = '请对客服进行评价:'txt2 = '请对物流进行评价:'layout = [    [sg.Text(txt1)],    # 创建两组单选框,循环导入内容列表里面的值    [sg.Radio(i, group_id=1) for i in r_list],    [sg.Text(txt2)],    [sg.Radio(i, group_id=2) for i in r_list],    [sg.Button('提交')]]window = sg.Window('单选框', layout)while True:    event, values = window.read()    if event == '提交':        msg1 = ''        msg2 = ''        # 遍历窗口返回值字典项目        for k, v in values.items():            if v:                if k < 4:                    # 状态为真的选项序号在第一组单选框内                    msg1 = txt1 + r_list[k] + '\n'                else:                    # 状态为真的选项序号在第二组单选框内                    msg2 = txt2 + r_list[k - 4]        sg.popup(msg1, msg2, title='评价结果')        # 复位两组单选框,随便用一组里的一个序号即key即可        window[0].reset_group()        window[6].reset_group()    if event is None:        breakwindow.close()

运行效果:

视频加载中...

9、复选框Checkbox

每个复选框都是独立的,不分组,拥有自己单独的key和value

格式:sg.Checkbox(参数),可以简写成sg.CB(参数)

特殊属性

Checkbox(    text,        # 文本显示在选框旁边    default=False,        # bool 如果为True,则选中     )
Update方法
Update(    value=None,    # 更新选中状态    # bool 如果为True,则选中,如果为False,则清空选中状态    text=None,    # str  更新选框旁边的文本    background_color=None,    # 更新元素的背景颜色    text_color=None,    # 更新元素的文本颜色    disabled=None,    # 更新元素的禁用状态    visible=None    # 更新元素的可见状态    )

10、滑块Slider

格式:sg.Slider(参数)

特殊属性

Slider(    range=(None, None),    # 滑块范围(最小值,最大值)    key=None,    # 元素的唯一标识符 规范书写key='-SLIDER-'    default_value=None,    # 滑块初始所处位置    resolution=None,    # 滑块值变动的最小单位值    tick_interval=None,    # 刻度值标记    orientation=None,    # 方向设定 水平方向或者垂直方向    # 有效值'horizontal' or 'vertical'     # 支持简写:'h' or 'v'    disable_number_display=False,    # bool 默认为False,如果为True,滑块旁的数字不显示。    border_width=None,    # 边界线宽度    relief=None,    # 浮雕设计    # 'raised','sunken','flat','ridge','solid','groove'      )
Update方法
Update(    value=None,    		# int or float    range=(None, None),    		# (int,int) or (float,float)    disabled=None,    		# bool     visible=None    		# bool    )
实例演示
import PySimpleGUI as sglayout = [    [sg.Text('Python', key='-TEXT-')],    # 定义滑块,范围从0到100,默认为12,每次变动1,以10位单位划刻度,横向显示,允许触发事件,尺寸为宽40高30    [sg.Slider(key='-SLIDER-', range=(0, 100), orientation='h', enable_events=True, tick_interval=10, size=(40, 30))]]window = sg.Window('滑块演示', layout)while True:    event, values = window.read()    print(event, values)    # 滑块位置变动,文本框的文字字号随滑块值变化    if event == '-SLIDER-':        window['-TEXT-'].update(font=(None, int(values['-SLIDER-'])))    if event is None:        breakwindow.close()

运行效果:

视频加载中...

11、图片Image

格式:sg.Image(参数),图片格式只能是png和gif。

四、布局容器组件介绍

1、列Column

格式:sg.Column(参数),可以简写成sg.Col(参数)

详细属性

Column(   layout,   # 将在“列”容器中显示的布局  [[sg.T('hello world')]]    background_color=None,    # 整栏背景色    size=(None, None),    # (宽度,高度)以像素为单位的尺寸(    # 偶尔不工作。    pad=None,    # 与周围元素间的间隔设定 左右上下    scrollable=False,    # 如果为True,则滚动条将添加到该列    vertical_scroll_only=False,    # 如果为True,则不会显示水平滚动条    right_click_menu=None,    # 右击调出菜单    key=None,    # 元素的唯一标识符    visible=True,    # 元素的可见状态设定    justification="left",    # 为列本身设置对齐方式    element_justification="left",    # 列内所有元素的对齐方式     # 有效值为 left,center,right    vertical_alignment=None,    # 垂直对齐方式    # 有效值为top,bottom,center    grab=None,    # 如果设定为True,可以拖拽此元素移动窗口    expand_x=None,    # 如果为True,则列将自动沿X方向扩展以填充可用空间    expand_y=None,    # 如果为True,则列将自动沿y方向扩展以填充可用空间      )
演示代码
import PySimpleGUI as sg# 定义列表框组件的内容music_list = ['逐月', '为你写下这首歌', '风吹半夏', '找到爱', '在你的身边', '墨尔本的秋天', '暂露锋芒']# 创建列1的布局col_layout1 = [    [sg.Text('请输入要播放的音乐地址:')],    [sg.InputText(size=(20, 1))],    [sg.Button('播放'), sg.Button('停止')]]# 创建列2的布局col_layout2 = [    [sg.Text('歌曲列表')],    [sg.Listbox(music_list, size=(20, 7))]]# 创建窗口布局layout = [[sg.Column(col_layout1), sg.Column(col_layout2)]]window = sg.Window('test', layout)while True:    event, values = window.read()    if event is None:        breakwindow.close()

运行效果:

2、框架Frame

格式:sg.Frame(参数)

特殊属性

Frame(    title,    # 标题文本    # str    layout,    # 容器内元素布局    # [[sg.In()]]    title_location=None,    # 标题所处位置    # 有效值有12种(ewsn 东西南北)    # e,es,en,s,se,sw,w,ws,wn,n,ne,nw    # 默认为nw    relief="groove",    # 浮雕设计  和其他元素的有效值是一样的。    # raised,sunken,flat,groove,ridge,solid    border_width=None,    # 框架元素的线条宽度    element_justification="left",    # 框架内元素的对齐方式    # 有效值 left,right,center    vertical_alignment=None,    # 垂直对齐方式    # top bottom center    # 支持首字母简写       )
演示代码
import PySimpleGUI as sg# 创建框架1的布局f_layout1 = [    [sg.Text('请输入学生信息:')],    [sg.Text('姓名'), sg.InputText(size=(34, 1))],    [sg.Text('年级'), sg.InputText(size=(34, 1))],    [sg.Button('添加', size=(10, 1)), sg.Button('查找', size=(10, 1)), sg.Button('删除', size=(10, 1))]]# 创建框架2的布局f_layout2 = [    [sg.Text('2022年度统计表')],    [sg.Listbox([], size=(34, 8))]]# 创建窗口布局,在第二行里创建了两个框架,第二个框架的可视属性为假,先不显示layout = [[sg.Button('切换显示')],          [sg.Frame(title='信息录入', layout=f_layout1, key='-FRAME1-'),           sg.Frame(title='学生信息汇总', layout=f_layout2, visible=False, key='-FRAME2-')]]window = sg.Window('框架演示', layout)# 定义用来设置框架属性的布尔变量flag = Falsewhile True:    event, values = window.read()    # 点击切换显示按钮,让两个框架一个显示一个不显示    if event == '切换显示':        window['-FRAME1-'].update(visible=flag)        window['-FRAME2-'].update(visible=not flag)        # 反转布尔变量的值        flag = not flag    if event is None:        breakwindow.close()

运行效果:

视频加载中...

3、标签选项卡Tab和TabGroup

标签选项卡由标签组TabGroup里面包含几个标签Tab构成,每个Tab拥有各自的布局layout,格式与窗口layout相同。所有的标签Tab布局都设置完毕后,最后用标签组TabGroup再包裹一下,最终就构成了完整的窗口布局layout。这个组件很繁琐,写代码时一定要组织好组件与组件、层与层的结构。

TabGroup的语句格式

格式:sg.TabGroup( [[sg.Tab('Tab1',tab1_layout,),sg.Tab('Tab2',tab2_layout)]])

TabGroup的特殊属性

TabGroup(    layout,    # 标签组内的tab布局,注意sg.Tab()要写在第一行。    tab_location=None,    # 标签标题所处的位置    # 有效值有12个,分别为left, right, top, bottom, lefttop, leftbottom,     # righttop, rightbottom, bottomleft, bottomright, topleft, topright    title_color=None,    # 标题文本颜色(未选中时)    tab_background_color=None,    # 所有标签背景颜色(未选中时)    selected_title_color=None,    # 选中时标题文本颜色    selected_background_color=None,    # 选中时标签背景颜色    background_color=None,    # 标签标题所在空白区域的背景颜色    border_width=None,    # 边界线宽度设定   )
Tab的特殊属性
Tab(    title,    # str,标签上显示的文本    layout,    # 标签内包含的布局    border_width=None,    # 边界线宽度设定    element_justification="left",    # 容器内元素的对齐方式    # 有效值 left,right,center       )
实例演示
import PySimpleGUI as sg# 创建标签1的布局tab1 = [    [sg.Text('请输入学生信息:')],    [sg.Text('姓名'), sg.InputText(size=(34, 1))],    [sg.Text('年级'), sg.InputText(size=(34, 1))],    [sg.Button('添加', size=(10, 1)), sg.Button('查找', size=(10, 1)), sg.Button('删除', size=(10, 1))]]# 创建标签2的布局tab2 = [    [sg.Text('2022年度统计表')],    [sg.Listbox([], size=(34, 8))]]# 创建窗口布局,最外层是TabGroup,内层包含两个Tablayout = [[sg.TabGroup([[sg.Tab(title='录入信息', layout=tab1), sg.Tab(title='信息汇总', layout=tab2)]],                       selected_title_color='red')]]window = sg.Window('框架演示', layout)while True:    event, values = window.read()    if event is None:        breakwindow.close()

运行效果:

五、预设按钮介绍

1、颜色选择器ColorChooserButton

颜色选择器在使用时,窗口上必须要有一个文本输入框来接收返回的十六进制颜色值,编写程序时可以把这个文本输入框的可视属性设为假。

格式:sg.ColorChooserButton()

特殊属性

ColorChooserButton(    button_text,    # 按钮元素要显示的文本    target=key,     # 显示颜色码的目标元素的key  )
演示代码
import PySimpleGUI as sg# 定义布局,颜色选择器的目标容器是文本输入框key='-IN-'layout = [[sg.InputText(key='-IN-', enable_events=True)], [sg.ColorChooserButton('选择颜色', target='-IN-')]]window = sg.Window('颜色选择', layout)while True:    event, value = window.read()    # 文本输入框在接收了颜色值后触发事件,用选择的颜色值更新文本颜色    if event == '-IN-':        window['-IN-'].update(text_color=value['-IN-'])    if event is None:        breakwindow.close()

运行效果:

视频加载中...

2、文件选择器FileBrowe、文件夹选择器FolderBrowse、文件另存为FileSaveAs

这三个预设按钮跟颜色选择器一样,需要文本输入框来接收返回的路径和文件名。

文件选择器格式:sg.FileBrowe(参数)

文件夹选择器格式:sg.FolderBrowse(参数)

文件另存为格式:sg.FileSaveAs(参数)

特殊属性(三者基本相同)

FileBrowse(        button_text="Browse",    # 按钮元素上要显示的文本    target=key,    # 显示路径的目标元素的key    file_types=(('ALL Files', '*.*'),),    # 只显示指定的文件类型  '*.pdf'    # 只显示指定的文件名称  'text.*'    initial_folder=None,    # 默认路径设定            ) 

3、日历选择器CalendarButton

格式:sg.CalendarButton(参数)

特殊属性

CalendarButton(    button_text,    # 按钮上显示的文本      target=(key),    # 选择的日期要显示的位置        close_when_date_chosen=True,    # 选择日期后 日历界面关闭        default_date_m_d_y=(None, None, None),    # 默认年月日设定        locale=None,    # 区域设置        format="%Y-%m-%d %H:%M:%S",    # 显示格式        begin_at_sunday_plus=0,    # 星期日开始位置,0表示第一列从星期日开始        month_names=None,    # 月份名,列表        day_abbreviations=None,    # 星期名,列表          title="Choose Date",    # 标题文本        no_titlebar=True,    # 没有标题板块            location=(None, None),    # 日历显示的位置      )
六、弹窗介绍

1、弹窗Popup

格式:sg.Popup(参数) 或 sg.popup(参数)

详细属性

Popup(   args=*<1 or N object>,   # 可变参数    title=None,    # 弹窗标题,如果未设定,则默认显示可变参数的第一个文本作为标题。    button_color=None,    # (文本颜色,背景颜色)    background_color=None,    # 弹窗的背景颜色    text_color=None,    # 弹窗上面的文本颜色    auto_close=False,    # 如果设定为True,弹窗会自动关闭界面    auto_close_duration=None,    # 自动关闭窗口之前界面持续的时间(以秒为单位)    custom_text=(None, None),    # 自定义按钮上要显示的文本。可以设定一个或者两个    non_blocking=False,    # 非阻塞设定。如果为True,立即执行下一步。不需要等待用户的输入。    font=None,    # 字体大小,名称设定    no_titlebar=False,    # 不显示标题栏。    grab_anywhere=False,    # 如果为True,拖动界面进行移动。    keep_on_top=False,    # 如果为True,保持界面在屏幕的最前方    location=(None, None),    # 界面出现的位置    any_key_closes=False,    # 如果为True,敲打任意键盘就会关闭界面.    # 如果为False,只用X窗口关闭按钮,用户选择,以及回车键才会关闭窗口。    image=None,    # 显示图片(支持base64)    modal=True    # 模态窗口设定。    # 除非关闭此窗口否则其他界面不能进行操作。    )

2、弹窗PopupGetText

显示带有文本输入字段的弹出窗口,返回输入的文本,如果关闭或取消则返回None。

格式:sg.PopupGetText(参数) 或者 sg.popup_get_text(参数)

详细属性

PopupGetText(   message,   # 显示的文本    title=None,    # 标题设定    default_text="",    # 输入框内默认文本设定    password_char="",    # 密码字符 一般设定为*    size=(None, None),    # 单行输入框的宽度和行高设定    button_color=None,    # 按钮元素的(文本颜色,背景颜色)设定    background_color=None,    # 界面背景颜色设定    text_color=None,    # 文本颜色设定    font=None,    # 字体名称和大小设定    no_titlebar=False,    # 无标题栏设定    grab_anywhere=False,    # 移动窗口设定    keep_on_top=False,    # 保持该弹窗在界面的最前方    location=(None, None),    # 窗口出现的位置设定    image=None,    # 图片上传    modal=True    #模态界面设定。如果为True,其他界面无法操作。    )

3、弹窗PopupGetFile

显示带有文本输入字段和浏览(browse)按钮的弹出窗口,以便用户可以选择文件。

格式:sg.PopupGetFile() 或 sg.popup_get_file()

详细属性

PopupGetFile(   message,    # 文本设定    title=None,    # 窗口标题设定    default_path="",    # 默认文件路径    save_as=False,    # 如果设定为True,打开按钮变成的另存为按钮,显示Save As...    multiple_files=False,    # 如果为True,可以多选。    file_types=(('ALL Files', '*.*'),),    # 设定可选文件类型。默认所有。    no_window=False,    # 直接打开文件资源管理器,不显示弹窗界面。    size=(None, None),    # 单行输入框的宽度行高的设定    button_color=None,    # 按钮元素(文本颜色,背景颜色)的设定    background_color=None,    # 整个界面的背景颜色的设定    text_color=None,    # 文本字体颜色的设定    font=None,    # 字体名称,大小设定    no_titlebar=False,    # 如果为True,不显示标题栏。    grab_anywhere=False,    # 如果为True,可以拖拽界面    keep_on_top=False,    # 如果为True,窗口保持在界面的最前方。    location=(None, None),    # 界面运行出现的初始位置)    initial_folder=None,    # 打开咨询管理器时默认的文件夹    image=None,    # 图片上传    modal=True    # 模态窗口)

4、其它弹窗

PopupGetFolder:带有文件夹选择按钮PopupAnnoying:没有标题栏,随意移动PopupAutoClose:自动关闭PopupCancel:带有Cancel按钮PopupOKCancel:带有OK和Cancel按钮PopupError:带有Error按钮PopupNoButtons:无按钮PopupNoWait:直接返回七、菜单栏介绍

格式:sg.Menu(参数)

详细参数

Menu(   menu_definition,   			# 菜单栏定义    tearoff=False,    			# 独立菜单设定    font=None,    			# 字体名称大小设定    pad=None,    			# 周围元素间隔设定    key=None,    			# 唯一标识符设定      )
menu_definition示例
menu_def = [['&File', ['!&New File', '&Open File::openkey', '---', 'Open Fol&der', 'E&xit']],            ['!&Edit', ['!&Paste', ['Cut', 'Repeat', ], 'Undo'], ],            ['&Find', ['Find...', 'Replace']],            ['&Tools', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],            ['&Help', '&About...'], ]
特殊符号

'---' :菜单栏分割线

& :快捷键标注 Alt+key(避免重复)

! :菜单栏禁用设定

:: :菜单key设定。作为事件的一部分,当有重名菜单项时可以设置。

实例演示

import PySimpleGUI as sg# 菜单设计menu_def = [['&File', ['!&New File', '&Open File::openkey', '---', 'Open Fol&der', 'E&xit']],            ['&Edit', ['&Paste', ['Cut', 'Repeat', ], 'Undo'], ],            ['F&ind', ['Find...', 'Replace']],            ['!&Tools', ['Command &1', 'Command &2', 'Command &3', 'Command &4']],            ['&Help', '&About...'], ]layout = [    [sg.Menu(menu_def, key='-MENU-')],    [sg.Multiline(key='-ML-', size=(60, 10))]]window = sg.Window('菜单演示', layout, keep_on_top=True)while True:    event, values = window.read()    print(event)    if event is None:        breakwindow.close()

运行效果:

视频加载中...

PySimpleGUI模块介绍到此全部完毕,篇幅太长了,但是为了知识点的连续性,还是都放在了一个篇幅里。如有不到之处,敬请教诲。

标签: #c语言人机界面 #python windows窗口 #python读取二进制文件转为图片 #python生成图形界面 #python可执行程序 图形界面