Python图形界面开发教程-课程笔记-2022-2-14

目录

1.1 写一个弹窗

1.2了解模板代码的组成

1.3 根据模板代码写一个界面

1.4 窗口关闭事件

1.5 通过字典获取返回值values

1.6 自定义主题

1.7 自定义窗口

1.8 布局和元素的组合的另一种方式

2.1文本元素介绍

2.2 单行输入框元素介绍

2.3 按钮元素介绍

2.4 下拉菜单

2.5 选择菜单

2.6 旋转按钮

2.7 单选框 Radiobox

2.8  复选框 Checkbox

2.9 滑块 Slider

2.10 图片显示 Image

3.1 列元素介绍

3.2 框架元素

3.3标签元素 Tab & TabGroup

4.1 颜色选择器 

4.2文件选择器

4.3文件另存为&文件夹选择器

4.4 日历选择器

4.5  预设按钮介绍

5.1 预设弹窗介绍

5.2 弹窗介绍PopupGetText

5.3 弹窗介绍PopupGetFile

5.4 弹窗介绍PopupGetFolder

5.5 弹窗介绍PopupAnnoying

5.6 弹窗介绍PopupAutoClose

5.7 弹窗介绍PopupCancel

5.8 弹窗介绍PopupOKCancel

5.9 弹窗介绍PopupError

5.10 弹窗介绍PopupNoButtons

5.11 弹窗介绍PopupNoWait

6.1 菜单栏 Menu

6.2 window窗口常用属性

6.3 Multiline多行文本框

6.4 cprint方法

6.5 print方法

6.6 垂直分割线


        从我接触的图形界面开发的库和插件大概有tkinter,pyqt,WxPython 但最近了解到了一种新类型的图像界面设计PySimpleGUI,那这个新的类有什么比较好的优势,嗯?这样来说吧PySimpleGUI封装了tkinter,这样就可以获得所有相同的部件元素,但是是以简单,高效的方式设计界面。

       学习一样,会四样。PySimpleGUI体系封装了tkinter、Qt、WxPython和Remi,这样就可以获得所有相同的部件元素,例如常见的按钮,弹窗,滑块,下拉菜单等。但是布局设计(交互方式)使用的是更简单,更人性化的方法。帮助我们创建和管理GUI部件元素,提供一个简单、高效的界面。

        以上的内容都是官方语言,其实看个人喜好。但最近确实想尝试一下这个PySimpleGUI新方法,这理解就是说python有一个简单的GUI。那接下来咱们就开始走这条不归路了吧。

开发所需:Python版本 3.8.6

PSG库的安装** 用清华源下载,从国内的服务器上下载速度很快。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple XX库名

1.1 写一个弹窗

import PySimpleGUI as sg



text='''Python之禅 by Tim Peters


优美胜于丑陋(Python 以编写优美的代码为目标)

明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)

简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)

复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)

扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)

间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)

可读性很重要(优美的代码是可读的)
'''

sg.Popup(text)

效果图:

1.2了解模板代码的组成

#1) 导入库
import PySimpleGUI as sg


#2) 定义布局,确定行数
layout=[

            [],
            [],
            []
                  ]

#3) 创建窗口
window=sg.Window('Python GUI',layout)



#4) 事件循环
while True:

      event,values=window.read() #窗口的读取,有两个返回值(1.事件  2.值)
      print(event,values)

      if event==None:  #窗口关闭事件
            break

#5) 关闭窗口
window.close()

1.3 根据模板代码写一个界面

import PySimpleGUI as sg
#设置主题
sg.theme('DarkTeal6')
#定义按钮颜色
sg.theme_button_color(('blue','#6D9F85'))
layout = [
    [sg.Text('请输入基本信息:')],
    [sg.Text('姓名',enable_events=True), sg.InputText('张明明')],
    [sg.Text('性别'),sg.InputText('man')],
    [sg.Text('国籍'), sg.InputText('cn')],
    [sg.Button('确认'), sg.Button('取消')],
]
#打印字體的顔色和背景顔色
print(sg.theme_button_color())
window = sg.Window('window Title', layout)

while True:
    event, values = window.read()
    #窗口关闭事件
    if event is None:
        break
    #给文本定义弹窗提示
    if event == '姓名':
        sg.Popup('這是一個文本内容請不要點擊!')
    #给确认按钮定义弹窗
    if event == '确认':
        sg.Popup('执行 确认 任务')
    #给取消按钮定义弹窗
    if event == '取消':
        sg.Popup('执行 取消 任务')
window.close()

1.4 窗口关闭事件

        定义窗口关闭事件是至关重要的,当你忘记定义窗口关闭事件,然后又点击了窗口右上角的X按钮,它会默默的消耗你100%的CPU。

import PySimpleGUI as sg
#设置主题
sg.theme('DarkTeal6')
#定义按钮颜色
sg.theme_button_color(('blue','#6D9F85'))
layout = [
    [sg.Text('请输入基本信息:')],
    [sg.Text('姓名',enable_events=True), sg.InputText('张明明')],
    [sg.Text('性别'),sg.InputText('man')],
    [sg.Text('国籍'), sg.InputText('cn')],
    [sg.Button('确认'), sg.Button('取消')],
    [sg.Button('确认1'), sg.Button('1取消')],
]
#打印字體的顔色和背景顔色
print(sg.theme_button_color())
window = sg.Window('window Title', layout)

while True:
    event, values = window.read()
    #窗口关闭事件
    if event is None:
        break
    #给文本定义弹窗提示
    if event == '姓名':
        sg.Popup('這是一個文本内容請不要點擊!')
    # #给确认按钮定义弹窗
    # if event == '确认':
    #     sg.Popup('执行 确认 任务')
    # 给取消按钮定义弹窗

    # if event in ('确认','取消'):
    #     sg.Popup('您执行了 确认或者取消 任务')
    #多个按钮事件头部包含确认可以用这个
    if event.startswith('确认'):
        sg.Popup('您执行了 确认或者确认1 的任务')
    # 多个按钮事件尾部包含取消可以用这个
    if event.endswith('取消'):
        sg.Popup('您执行了 取消或者取消1 的任务')
window.close()

1.5 通过字典获取返回值values

        界面默认的返回值是通过列表索引获得指定值,   但是当给元素设定唯一标识符`key`,则该元素无法通过列表索引,只能通过字典key进行索引。`print(values[key])` 


```

layout=[
            [sg.In()],
            [sg.In(key='-IN2-')],
            [sg.In()],
            [sg.B('print')]
                  ]
...

if event=='print':
      print(values)
      print(values[0])
      print(values[1])
      print(values['-IN2-'])

```

import PySimpleGUI as sg

layout = [
    [sg.Text('请输入基本信息:')],
    #enable_events定义定义点击文字有提示
    [sg.Text('姓名',enable_events=True), sg.InputText('张明明')],
    #
    [sg.Text('性别'), sg.InputText('男',key='-Input_Sex-')],
    [sg.Text('国籍'), sg.InputText('国籍')],
    [sg.Button('确认'), sg.Button('取消')],
    [sg.Button('确认1'), sg.Button('1取消')],
]

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

while True:
    event, values = window.read()
    if event is None:
        break
    if event == '确认':
        # print(values['-Input_Sex-'])
        print(values[1])
    # #给文本定义弹窗提示
    if event == '姓名':
        sg.Popup('這是一個文本内容請不要點擊!')
    # #给确认按钮
    # if event == '确认':
    #     sg.Popup('执行 确认 任务')
    # if event in ('确认','取消'):
    #     sg.Popup('您执行了 确认或者取消 任务')
    # #多个按钮事件头部包含确认可以用这个
    # if event.startswith('确认'):
    #     sg.Popup('您执行了 确认或者确认1 的任务')
    # # 多个按钮事件尾部包含取消可以用这个
    # if event.endswith('取消'):
    #     sg.Popup('您执行了 取消或者取消1 的任务')
window.close()

1.6 自定义主题

主题theme包括: 窗口的背景颜色,文本Text颜色,按钮的字体颜色和按钮颜色等等。  


默认主题:`"Dark Blue 3" `  



如何直观查看有效主题?   

```
import PySimpleGUI as sg

sg.theme_previewer()

```

如何获取有效主题。
```
import PySimpleGUI as sg

print(sg.theme_list()) 

```


**2.如何设定主题?**

`sg.theme('主题名称')`



如何随机主题,
sg.theme('主题名称')


`sg.theme('')`





**3.如何修改主题部分的设置** 


```
 '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_color
theme_border_width
theme_button_color
theme_element_background_color
theme_element_text_color
theme_input_background_color
theme_input_text_color
theme_progress_bar_border_width
theme_progress_bar_color
theme_slider_border_width
theme_slider_color
theme_text_color

```


import PySimpleGUI as sg

sg.theme('LightGreen3')
sg.popup('LightGreen3 Theme', '按钮文字是白色的'')

# 修改部分主题设定
sg.theme_button(('black', '#6D9F85'))

sg.popup('修改后的LightGreen3 Theme', '按钮文字是黑色的')

1.7 自定义窗口

目标:

1. 利用for循环快速定义元素

2. 布局和元素的另一种组合方式

Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。<font></td></tr></table>** 

```
# for循环遍历字符串
str_a='abcd1234'

for i in str_a:
   print(i)


# for循环遍历列表

list_a=[1,4,'A','张三']

for i in list_a:
   print(i)

```

layout=[[sg.In(i) for i in 'ABCD']]

layout=[[sg.In(i)] for i in ['江苏','上海','广东']]

```

for 循环前面是个小括号时,从左向右遍历。  
for 循环前面是个中括号时从上向下遍历

1.8 布局和元素的组合的另一种方式

最常见的布局定义方式
```
layout=[
[sg.Text('请输入基本信息')]
[sg.Text('姓名'),sg.In()],
[sg.Text('性别'),sg.In()],
[sg.Text('国籍'),sg.In()],
[sg.B('确认'),sg.B('取消')]

]

```
```
layout_bottom=[[sg.B('Exit')]]

layout=layout+layout_bottom

```

元素间除了用 `,`隔开以外,还可以用`]+[`替代。
```
layout=[
[sg.Text('请输入基本信息')],
[sg.Text('姓名')]+[sg.In()]]+[
[sg.Text('性别')]+[sg.In()]]+[
[sg.Text('国籍'),sg.In()],
[sg.B('确认'),sg.B('取消')]]

]
```

2.1文本元素介绍

        一般是指单行文本,也可以指多行文本,多行文本时也不会出现滚动条。  

`sg.Text('')`,支持简写`sg.T('')`

```python
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: 元素可见状态
    )

```

例子:

import PySimpleGUI as sg

text = '''
python 之禅达 by tim

优美的不错的PU     皮呕  做吧大大大大大大大大的5

这是一个全新的世界
'''

layout = [[sg.T(text,
                key='-TEXT-',
                size=(50, 12),
                font=('宋体', 15),
                auto_size_text=True,
                enable_events=True,
                relief='raised',
                border_width=5,
                text_color='yellow',
                background_color=None,
                grab=True,
                pad=None,
                justification='r',
                right_click_menu=['1', ['1', ['1-1', '1-2'], '2', ['2-1', '2-2'], '3',['3-1', '3-2']]],
                tooltip='这是个多行文本',
                visible=True,
                )]
          ]

window = sg.Window('window Title', layout, keep_on_top=True)
while True:
    event, values = window.read()
    print(event)
    if event is None:
        break
    # if event == '-TEXT-':
    #     sg.popup('点击文本发生一个事件')

window.close()

**Update方法,用于元素的更新!**

window[key].update()`  


`window[key].Update()`


**元素可以更新的属性只有如下几种:**

```python
update(

    value=None,
            # str 更新文本

    background_color=None,
            # str 更新文本背景颜色

    text_color=None,
            # str 更新文本颜色

    font=None,
            # 更新字体的名称或者大小

    visible=None
            # 更新元素的可见状态

    )

```

- 更新文本显示

`window[key].update(value='')`  or `window[key].update('')`

- 更新文本背景颜色

`window[key].update(background_color='red')`  

- 更新文本颜色

`window[key].update(text_color='yellow')`

- 更新字体名称或者大小

`window[key].update(font='黑体')`  or  `window[key].update(font=('',22))`

- 更新元素的是否可见

`window[key].update(visible=False)`

代码案例:

import PySimpleGUI as sg
sg.theme('DarkTeal6')

layout = [
    [sg.Button('中文'),sg.Button('English')],
    [sg.Text('请输入基本信息',size=(40,1),key='-title-')],
    [sg.Text('姓名:',size=(8,1),key='-NAME-'), sg.InputText('xxx')],
    [sg.Text('性别:',size=(8,1),key='-SEX-'), sg.InputText('xx')],
    [sg.Text('国籍:',size=(8,1),key='-CONTRY-'), sg.InputText('xx')],
    [sg.Button('确认',key='-CONF-'), sg.Button('取消',key='-CANCEL-')],
]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break
    if event == 'English':
        window['-title-'].update('请输入基本信息')
        window['-NAME-'].update('姓名:')
        window['-SEX-'].update('性别:')
        window['-CONTRY-'].update('国籍:')
        window['-CONF-'].update('确认')
        window['-CANCEL-'].update('取消')
    if event == '中文':
        window['-title-'].update('Please enter basic information')
        window['-NAME-'].update('NEME:')
        window['-SEX-'].update('SEX:')
        window['-CONTRY-'].update('Nationlity:')
        window['-CONF-'].update('Confim')
        window['-CANCEL-'].update('Cancel')

window.close()

2.2 单行输入框元素介绍

`sg.InputText()`支持简写`sg.In()`


```python
InputText(
    default_text='',
            # 默认值设定,可以为空字符串。
            # Any

    key=None,
            # 元素的唯一标识符  
            # 规范 key='-INPUT-'

    size=(None, None),
            # 宽,高

    disabled=False,
            # bool :元素禁用,
            # 如果为True则禁用,无法输入任何值。

    password_char="",
            # 密码字符,一般设置为*

    justification=None,
            # 对齐方式 'r','l','c'

    background_color=None,
            # 输入框的颜色

    text_color=None,
            # 输入框的文本颜色

    font=None,
            # 输入框字体的名称或者大小设定

    tooltip=None,
            # str: 悬浮文本
            # 当光标置于该元素上方时,设置的文本会显示。

    border_width=None,
            # 输入框边界线宽度设定

    enable_events=False,
            # bool : 输入框的事件属性,
            # 如果设定为True,输入值时会发生一个事件。

    do_not_clear=True,
            # bool : 输入框内容不被清除
            # 如果为False,一发生事件,该输入框内的值会被清除。

    focus=False,
            # bool : 设定焦点
            # 如果为真,则光标显示在此输入框。

    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))
            # 元素间隔

    disabled_readonly_background_color=None,
            # str: 元素禁用时的背景颜色设定

    disabled_readonly_text_color=None,
            # str: 元素禁用时的文本颜色设定

    right_click_menu=None,
            # 右击按钮菜单 List[List[Union[List[str],str]]]
            # 设定后,右击此元素会调出菜单

    visible=True,
            # 元素的可见状态
            # 如果为False、,则界面不显示该元素。
    )
```

例子:

import PySimpleGUI as sg
sg.theme('DarkTeal6')

layout = [
    [sg.InputText(
        default_text='输入密码六个字',
        # 默认值设定,可以为空字符串。
        # Any

        key=None,
        # 元素的唯一标识符
        # 规范 key='-INPUT-'

        size=(None, None),
        # 宽,高

        disabled=False,
        # bool :元素禁用,
        # 如果为True则禁用,无法输入任何值。

        password_char="*",
        # 密码字符,一般设置为*

        justification=None,
        # 对齐方式 'r','l','c'

        background_color=None,
        # 输入框的颜色

        text_color=None,
        # 输入框的文本颜色

        font=None,
        # 输入框字体的名称或者大小设定

        tooltip=None,
        # str: 悬浮文本
        # 当光标置于该元素上方时,设置的文本会显示。

        border_width=None,
        # 输入框边界线宽度设定

        enable_events=False,
        # bool : 输入框的事件属性,
        # 如果设定为True,输入值时会发生一个事件。

        do_not_clear=True,
        # bool : 输入框内容不被清除
        # 如果为False,一发生事件,该输入框内的值会被清除。

        focus=False,
        # bool : 设定焦点
        # 如果为真,则光标显示在此输入框。

        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))
        # 元素间隔

        disabled_readonly_background_color=None,
        # str: 元素禁用时的背景颜色设定

        disabled_readonly_text_color=None,
        # str: 元素禁用时的文本颜色设定

        right_click_menu=None,
        # 右击按钮菜单 List[List[Union[List[str],str]]]
        # 设定后,右击此元素会调出菜单

        visible=True,
        # 元素的可见状态
        # 如果为False、,则界面不显示该元素。
    )],
    [sg.Button('Print')]
    ]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break
    if event == 'Print':
        print(type(vaules[0]))

window.close()

**SetFocus方法,用于元素设置焦点。**


`window[key].SetFocus()` 

`window[key].set_focus()` 


**Update方法,用于元素的更新。**

`window[key].update()`  

`window[key].Update()`

练习:

import PySimpleGUI as sg
layout=[
        [sg.T('输入框小练习!')],
        [sg.T('请输入3位数密码')],
        [sg.In(tooltip='12?',password_char='*')],
        [sg.B('OK')]
        ]

window=sg.Window('Python GUI',layout,keep_on_top=True)

while True:
    event,values=window.read() 

    password=124

    if event==None:  
        break
    if event=='OK':
        if values[0]==str(password):
            message='输入正确,密码是'+values[0]
        else:
            message='输入错误,密码不是'+values[0]
        sg.Popup(message,keep_on_top=True)


window.close()

运行程序

 2.3 按钮元素介绍

`sg.Button('')`,支持简写`sg.B('')`

```python
Button(
    button_text="",
            # 显示在按钮上的文本

    key=None,
            # 元素的唯一标识符

    tooltip=None,
            # 悬浮文本

    disabled=False,
            # 元素禁用设定,如果为True,点击按钮也无法发生事件。

    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

    border_width=None,
            # 按钮边界线设定

    size=(None, None),
            # 按钮尺寸设定

    auto_size_button=None,
            # 按钮上的文本自动调节

    button_color=None,
            # 按钮颜色

    disabled_button_color=None,
            # 按钮元素禁用时显示的按钮颜色

    font=None,
            # 字体名称,大小设定

    bind_return_key=False,
            # 绑定回车键
            # 如果设定为True,回车键会使此元素被点击。

    focus=False,
            # 焦点设置

    pad=None,
            # 和其他元素之间间隔设定

    visible=True,
            # 元素的可见状态设定
            # 如果为True,元素则不可见。
        )
```

元素更新

```python
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

layout = [[

    sg.B('开始', key='-START-', font=('宋体', 16), button_color=('black', 'yellow')),
    sg.B('重置', key='-RESET-', font=('宋体', 16), button_color=('black', 'green')),
    sg.B('结束', key='-STOP-', font=('宋体', 16), button_color=('black', 'red'))

]]

window = sg.Window('Python GUI', layout, keep_on_top=True)

while True:
    event, values = window.read()

    print(event)

    if event == None:
        break
    if event == '-START-':
        window['-START-'].update(disabled=True, button_color=('grey', 'grey'))
        window['-RESET-'].update(disabled=False, button_color=('black', 'yellow'))

    if event == '-RESET-':
        window['-START-'].update(disabled=False, button_color=('black', 'yellow'))
        window['-RESET-'].update(disabled=True, button_color=('grey', 'grey'))

window.close()

列表 listbox

列表 Listbox

`sg.Listbox()`or `sg.LB()`


```python


Listbox(
    values,
            # 列表或者元祖等
    default_values=None,
            # 默认选中的值或者列表

    key=None,
            # 元素的唯一标识符

    select_mode=None,
            # 选择模式,有效值包含如下4种。
            # single  ,单选,更换时点击选择
            # multiple  ,可以多选,逐一点击选择
            # browse   ,单选,鼠标按住也可以更换选择
            # extended  ,可以多选,鼠标按住也可以扩展选择

    enable_events=False,
            # 元素的事件属性
            # 如果设定为True,元素列表项目被选中时会发生事件。

    bind_return_key=False,
            # 绑定回车键
            # 如果设定为True,回车键被按下时相当于此元素被点击

    size=(None, None),
            # 字符宽度,行高

    disabled=False,
            # 元素是否禁用

    auto_size_text=None,
            # 如果为True,元素自动根据内容大小调整

    font=None,
            # 设置字体名称或者大小

    no_scrollbar=False,
            # 如果为True,则没有滚动条

    background_color=None,
            # 背景颜色设定

    text_color=None,
            # 字体颜色设定

    pad=None,
            # 元素间隔设定

    tooltip=None,
            # 悬浮文本

    right_click_menu=None,
            # 右击调出菜单

    visible=True,
            # 元素可见状态设定

    )
```

元素可以更新的属性只有如下几种:**



```python
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
sg.theme('DarkTeal6')

hob = ['看书','电影','音乐','打球','运动','美食','写代码']

pet = ['狗','猫','鸟']
layout = [
    [sg.Listbox(hob,
                # 列表或者元祖等
                default_values='运动',
                # 默认选中的值或者列表

                key='-LB-',
                # 元素的唯一标识符

                select_mode='multiple',
                # 选择模式,有效值包含如下4种。
                # single  ,单选,更换时点击选择
                # multiple  ,可以多选,逐一点击选择
                # browse   ,单选,鼠标按住也可以更换选择
                # extended  ,可以多选,鼠标按住也可以扩展选择

                enable_events=True,
                # 元素的事件属性
                # 如果设定为True,元素列表项目被选中时会发生事件。

                bind_return_key=True,
                # 绑定回车键
                # 如果设定为True,回车键被按下时相当于此元素被点击

                size=(20, 6),
                # 字符宽度,行高

                disabled=False,
                # 元素是否禁用

                auto_size_text=None,
                # 如果为True,元素自动根据内容大小调整

                font=None,
                # 设置字体名称或者大小1

                no_scrollbar=True,
                # 如果为True,则没有滚动条

                background_color=None,
                # 背景颜色设定

                text_color=None,
                # 字体颜色设定

                pad=None,
                # 元素间隔设定

                tooltip=None,
                # 悬浮文本

                right_click_menu=None,
                # 右击调出菜单

                visible=None,
                # 元素可见状态设定
                )]
    ]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    print(event)
    if event == None:
        break
    if event == '-LB-':
        sg.popup('选中的值是:',vaules['-LB-'])

window.close()

案例2

import PySimpleGUI as sg

hob = ['看书', '电影', '音乐', '打球', '运动', '美食', '写代码']
pet = ['狗', '猫', '鸟']
select_mode = ['single','multiple','browse','extended']

layout = [[sg.Listbox(hob, size=(20, 6), key='-LB-', no_scrollbar=True)]]+\
    [[sg.Button('PET'),sg.Button('HOB')]]+\
    [[sg.Button('set_to_index_2')],
    [[sg.Button('scroll_to_index_2')]],
    [[sg.Button(i) for i in select_mode]]
     ]

window = sg.Window('python gui', layout, keep_on_top=True)

while True:
    event, vaules = window.read()
    key = '-LB-'
    if event == None:
        break
    # if event == '-LB-':
    #     sg.popup('选中的值是:', vaules['-LB-'])
    if event == 'PET':
        window[key].update(values=pet)
    if event == 'HOB':
        window[key].update(values=hob)
    if event == 'set_to_index_2':
        window[key].update(set_to_index=[1,2])
        print(window[key].get())
    if event == 'scroll_to_index_2':
        window[key].update(scroll_to_index=1)
    if event == select_mode[0]:
        window[key].update(select_mode=event)
    if event == select_mode[1]:
        window[key].update(select_mode=event)
    if event == select_mode[2]:
        window[key].update(select_mode=event)
    if event == select_mode[3]:
        window[key].update(select_mode=event)

window.close()

案例3 密码选中展示

import PySimpleGUI as sg

accounts = {'賬號1':'12345','賬號2':'6789','賬號3':'9111213','賬號4':'112345'}

list_Acc = []

for k in accounts:
    list_Acc.append(k)
layout = [
     [sg.LBox(list_Acc,size=(18,8),key='-LB_Acc-',enable_events=True,no_scrollbar=True,font=('宋体',18))],
     [sg.Text('密码:'),sg.InputText(key='-INPUT_PW-',size=(23,1))]
    ]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break
    if event == '-LB_Acc-':
        # print(vaules['-LB_Acc-'][0])
        #获取数值
        window['-INPUT_PW-'].update(accounts[vaules['-LB_Acc-'][0]])
        #指定光标
        window['-INPUT_PW-'].set_focus()
        #选中内容
        window['-INPUT_PW-'].update(select=True)
window.close()

2.4 下拉菜单

输入框和下拉菜单的一个组合部件

sg.Combo()`or`sg.InputCombo()`or`sg.DropDown()`or`sg.Drop()`   

```python
Combo(values,
            # List[Any] or Tuple[Any] 
            # 显示下拉菜单信息,列表或者元祖

    default_value=None,
            # initial value
            # 默认选中

    key=None,
            # 唯一标识符

    size=(None, None),
            # 元素宽度,行高

    auto_size_text=None,
            # 元素根据文本自动调节

    background_color=None,
            # 背景颜色设定

    text_color=None,
            # 文本颜色设定

    enable_events=False,
            # 元素事件属性
            # 如果设定为True,当元素被选中时,会发生一个事件。

    disabled=False,
            # 元素禁用状态设定,
            # 设定为True时,元素不能进行选择,也不能输入。

    pad=None,
            # 元素间隔设定

    tooltip=None,
            #str: 悬浮文本设定

    readonly=False,
            # 元素只读属性,只能选择,不能输入内容。

    font=None,
            # 元素字体名称或者大小设定

    visible=True,
            # 元素可见状态设定
        )
```

和Listbox最大的区别在于,可以输入,但是不能多选。
Listbox取得的值是存放在列表里面,
但是Combo取得的值是对象本身。  

2.5 选择菜单

`sg.OptionMenu()`

OptionMenu只有tkinter端口才有此元素,其他三个端口没有。  
此元素和设置了只读属性的ComboBox很像。  
OptionMenu没有`font`属性,也没有 `enable_events`  事件属性  

```python

OptionMenu(values,

    default_value=None,

    key=None,

    size=(None, None),

    disabled=False,

    auto_size_text=None,

    background_color=None,

    text_color=None,

    pad=None,

    tooltip=None,

    visible=True,
        )
```



**Update方法,用于元素的更新。**

`window[key].update()`  

`window[key].Update()`

**元素可以更新的属性只有如下几种:**

```python
Update(
    value=None,
    # 更新默认选中的元素

    values=None,
    # 更新所有显示的文本选项

    disabled=None,
    # 更新元素的禁用状态

    visible=None
    # 更新元素的可见状态
    )
```
**元素可以更新的属性只有如下几种:**

```python
Update(
    value=None,
    # 更新默认选中的元素

    values=None,
    # 更新所有显示的文本选项

    disabled=None,
    # 更新元素的禁用状态

    visible=None
    # 更新元素的可见状态
    )
```

2.6 旋转按钮

特征: 含有向上向下两个箭头按钮

![shot1](img\spin1.PNG )
```python
Spin(values,
    initial_value=None,
    key=None,
    disabled=False,
    enable_events=False,
    size=(None, None),
    auto_size_text=None,
    font=None,
    background_color=None,
    text_color=None,
    pad=None,
    tooltip=None,
    visible=True,
        )
```

2.7 单选框 Radiobox


`sg.Radio()`or`sg.R()`


```python
Radio(text,
        # str 文本用于显示在单选框旁边

    group_id,
        # any
        # 组ID

    key=None,
        # 元素的唯一标识符

    default=False,
        # bool 如果为True,则默认选中

    disabled=False,
        # 设定禁用状态

    size=(None, None),
        # 设定元素宽度,行高

    auto_size_text=None,
        # bool 默认为True
        # 元素根据文本自动调整大小

    background_color=None,
        # 元素背景颜色

    text_color=None,
        # 元素文本颜色

    font=None,
        # 字体名称和大小设定
        # (str,int)

    pad=None,
        # 左右上下  (int,int)or((int,int),(int,int))
        # 元素间隔设定

    tooltip=None,
        # 悬浮文本设定

    enable_events=False,
        # 元素事件属性
        # 当设定为True时,选框被选中时会发生事件

    visible=True,
        # 设定元素的可见状态

        )
```

课程例子:

import PySimpleGUI as sg
sg.theme('DarkTeal6')

list_coment = ['非常满意','满意','一般','不满意']
list_id = ['1.请对小A服务进行评价.','2.请对小B的服务进行评价.']

layout = [
    [sg.Text(list_id[0])],
    [sg.Radio(i,group_id=1)for i in list_coment],
    [sg.Text(list_id[1])],
    [sg.Radio(i, group_id=2) for i in list_coment],
    ]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break

window.close()

例子2

import PySimpleGUI as sg
sg.theme('DarkTeal6')

list_coment = ['非常满意','满意','一般','不满意']
list_id = ['1.请对小A服务进行评价.','2.请对小B的服务进行评价.']

layout = [[sg.Text(list_id[0])]]+\
         [[sg.Radio(i,group_id=1)]for i in list_coment]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break

window.close()

 例子3

import PySimpleGUI as sg
sg.theme('DarkTeal6')

list_coment = ['非常满意','满意','一般','不满意']
list_id = ['1.请对小A服务进行评价.','2.请对小B的服务进行评价.']
layout = [[sg.Text(str(y+1)+'.')]+[sg.Radio(text=x,group_id=y,key=(x,y))for x in list_coment]for y in range(9)]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break

**ResetGroup方法,相同组ID的单选框都更新为未选中状态。**

`window[key].ResetGroup()`  

`window[key].reset_group()`

2.8  复选框 Checkbox

`sg.Checkbox()`or `sg.CB()`



```python

Checkbox(
    text,
        # 文本显示在选框旁边
    default=False,
        # bool 如果为True,则选中
    size=(None, None),
        # 尺寸设定,元素的宽度和行高
    auto_size_text=None,
        # bool 默认为True
    font=None,
        # (str,int)字体的名称和大小设定
    background_color=None,
        # 背景颜色设定
    text_color=None,
        # 字体颜色设定
    enable_events=False,
        # bool 元素的事件属性
    disabled=False,
        # bool 元素的禁用状态
    key=None,
        # 元素的唯一标识符
        # 规范key='-CHECKBOX-'
    pad=None,
        # 和周围元素的间隔((int,int),(int,int)) 左右上下
    tooltip=None,
        # str 悬浮文本设定
    visible=True,
        # bool 元素的可见状态设定
     )

```

例子:

import PySimpleGUI as sg
sg.theme('DarkTeal6')

Animal = ['长颈鹿','老虎','狮子','大笨象','牛','羊']

layout = [[sg.Text('选择你喜欢的动物吧!')]]+\
    [[sg.Checkbox(i)] for i in Animal]+\
    [[sg.OK()]]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    print(vaules)
    if event == None:
        break


window.close()

复选框升级案例

import PySimpleGUI as sg
sg.theme('DarkTeal6')

Animal = ['长颈鹿','老虎','狮子','大笨象','牛','羊']

layout = [[sg.Text('选择你喜欢的动物吧!')]]+\
    [[sg.CB(i)] for i in Animal]+\
    [[sg.B('update')]]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    print(vaules)
    if event == None:
        break
    if event == 'update':
        for i in range(6):
            window[i].update(
                value=False,
                text=None,
                background_color='yellow',
                text_color='red',
                disabled=None,
                visible=None
            )


window.close()

2.9 滑块 Slider

滑块,有水平方向的也垂直方向的。

`sg.Slider()`  



```python
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'
    enable_events=False,
    # 元素的事件属性
    disabled=False,
    # 元素禁用状态设定
    size=(None, None),
    # 元素的尺寸设定 宽度和行高
    font=None,
    # 字体名称和大小设定
    background_color=None,
    # 滑块背景颜色设定
    text_color=None,
    # 元素文本颜色设定
    pad=None,
    # 元素间隔设定((int,int),(int,int))
    tooltip=None,
    # 元素悬浮文本设定
    visible=True,
    # 元素可见状态设定
    )
```

`sg.theme_slider_color('')`

练习:

import PySimpleGUI as sg
sg.theme('DarkTeal6')


layout = [
    [sg.Slider(key=i,range=(1,500),
               default_value=100*(i+2),
               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'
               enable_events='raised',
               # 元素的事件属性
               disabled=False,
               # 元素禁用状态设定
               size=(12, 20),
               # 元素的尺寸设定 宽度和行高
               font=None,
               # 字体名称和大小设定
               background_color='blue',
               # 滑块背景颜色设定
               text_color='red',
               # 元素文本颜色设定
               pad=None,
               # 元素间隔设定((int,int),(int,int))
               tooltip=None,
               # 元素悬浮文本设定
               visible=True,
               # 元素可见状态设定




               ) for i in range(3)]
]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    print(vaules)
    if event == None:
        break

window.close()

2.10 图片显示 Image

`sg.Image()`


```python
Image(
    filename=None,
    # 图片路径仅支持GIF和PNG

    data=None,
    #base64编码的字符串

    background_color=None,
    #背景颜色设定

    size=(None, None),
    # 图片 宽度和高度设定(pix)

    pad=None,
    #和周围元素间的间隔 ((int,int),(int,int))
    # 左右上下顺序

    key=None,
    # 元素的唯一标识符

    tooltip=None,
    # 元素的悬浮文本

    right_click_menu=None,
    # 右击调出菜单  ['开始',['开始','中止','结束']]

    visible=True,
    # 元素可见状态 bool

    enable_events=False,
    # 元素事件属性,默认为False
        )`sg.Image()`


```python
Image(
    filename=None,
    # 图片路径仅支持GIF和PNG

    data=None,
    #base64编码的字符串

    background_color=None,
    #背景颜色设定

    size=(None, None),
    # 图片 宽度和高度设定(pix)

    pad=None,
    #和周围元素间的间隔 ((int,int),(int,int))
    # 左右上下顺序

    key=None,
    # 元素的唯一标识符

    tooltip=None,
    # 元素的悬浮文本

    right_click_menu=None,
    # 右击调出菜单  ['开始',['开始','中止','结束']]

    visible=True,
    # 元素可见状态 bool

    enable_events=False,
    # 元素事件属性,默认为False
        )

**f-string 格式化字符串常量(formatted string literals)**

案例:

import PySimpleGUI as sg
sg.theme('DarkTeal6')

image_path = r'图片'

layout = [
[sg.Image(filename=image_path+f'{i}.png') for i in range(1,6)]
]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    print(vaules)
    if event == None:
        break

window.close()

base64 格式的代码形式

import PySimpleGUI as sg
sg.theme('DarkTeal6')


ͼƬ1 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAJ5SURBVGhD7dvLTttAFMbx4xCcWxEuoGxg0bJB6T0mBBa8CFLfo8/Q96jUF2FHYFUqxIJ2QRGNqm5QlSsxmcEHmRSDnWQ854zzR4hgImV+X7hkg/X5y1cPUtanj3tWxr+duu6ecXd3V14wuaP9ffkx1c/4DJ62jIRf9/v+rfCMgndabfh5egpnJyf+lfCMgCP4uNHw/jabAN7TL01Yw+/Ahz7YGr5FjCX8P/CQ3G234d/Vlfx6lFjBw8B/fl/K9163I+8XJRbwABgeAovbcSMNfwAskZOAMZJwlWCMFBzB3xWCMRLwUbD4K6wKjGmF6wBjWuC9bk8bGEsULsDnZz/g28GBNjCWCDwIbl78Gr6UHmgDY0rhCD5u0AFjSuCj4MGADhibKpwDGJsKnBMYmwjOEYyNBecMxmLBTQBjkeAmgbFH4SaCsVC4eEkZBHueJ69xB2Oh8KVyGV5sbMBcdr4lPrcsC5yVFVhYdCCTifWrgWSPCpzlZXi/s11Yr1SGA9gtAV5wHCivrrEfINLJbweoywGytt0xYYBYJxYDvKvXcyYMMNZJgwPM53JdjgNMdEIxwNutLVsMYOfzrAaYysnEAG9qNVYDTPVEwQFy+UKf8gBKTiIGeF3bzFIeQOkJKA+QyCPfG6BYvKYwQKKPKAdw3TkKA2j5XqMwgBY4FhygUCwNkhxAKxwTA1TcaibJAUjAsSQHIAXHggPkiyVPxQAk4ZgY4JVbtVQMQBqOBQcolJ5J8KQDsIBj8keg+gHCBrBiDMAKjoUNsPh8yb/H07GEY6MDxIk1HBtnACPgGA6wtv7SvxKeUXAsyrNuJDxKM3jamv2L5axUBHAD581flhCfpAwAAAAASUVORK5CYII='
ͼƬ2 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAJWSURBVGhD7dtPTxpBHMbx3+6yLK0NRg/YpCT1oodWPSCiJr4Rk76Pvoa+jyZ9I1xFT+XGhcR/COGAoPyVHXmaHtZhkN3ZmVm+CWGZcPk8LNywfv3+M6GE9fPHuWXPrhPXv0+8cHbGDkyuUi6z50R/4it40uLCR8Ph7Mq8uPB6rUa1apV6j53ZiTnNvdXbzSZVL6+MG0D4O27aAELwbqfDHjSZGDOAENz/kWs3H+ju+tqYAYRvdb/RcGDMAAvBkQkDvAuOdB5gKTjScYBQ4EinAUKFIx0GiASOVB4gUjhScQApcPT/AE/dR3YW1wBS4cgfoNVoUONmOkCvy85kDxALHA36fWrd38cyQKxwFMcASsCRzAGUgiMZAygJR1EOoDQcRTGAFnAU5gBawdG8AZ57T+yMl5ZwhAEebm9oPB6zM3+Av5ULuq3X2eu30hpuWRatZbO0kcuRbb9SHMd5/rqzQ1v5PHv9VlrCAc5Ncesbm+TYzhRs97d3d+ng5MTbnA7hv4eXVvAgcCrlzsCnaREw0gLOA+8flxYCI6XhgWDXHSwDRkrCg8CumxoycKnkLgNGSsF54L3ScSoMMFICHgj20qMowChWOBdcPHKiAKNY4HGCkVR4EDjtpccywUgKnAf+XjyyZYJRpHAVwSgSeDDYm6gARqHC+eCipQIYhQLXCYyWggeBvYzaYPQuOA/87VBtMFoIHgj+kCGdwEgIbtkccOGQdAIjIfin7LoxYCR8q5sCRnPhpoERF/75S944MOLCM2sfjQMj4e+4aa3gSWv1F8tViYjoBXy8SJbXZKzgAAAAAElFTkSuQmCC'
ͼƬ3 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAJpSURBVGhD7ZrdbtMwFIBPmp+mbZKuVVRQQaK9YOOCaRPSuNqLIPEePAPvgcSL7G4SN0OCDRATKmJsYe20dc3apsF2TOm6UuKqtHjHn3RUx85FvxzHcY6ivXz1OgZkvHj+TMvwNjqGGX+yvc06bjNvdnbYL+qMK3FsKHFsKHFsKHFsKHFsKHFsKHFsTBU/ajTgw97etTg9PuajcjO1EHF4cHBDNGMYYOg6P1oc9+p1KPk+P5oN4ULE5cUFhGGHtQf9PnSvrhYen9+9j5tBwP7DPEiV8fNWCzqXbcgsIdMUx3XBzhdA0zR4tLkBuYLDRxLoBTnc34c4TuqmbrEID9fXWXuUmUpP/V4PumG4lDglYr1el4k1TwI4PzsbRnD07Zp0WuRY1YlUHA1Yc3zB/fLxE5MOyYxs/Uh/K0jzOIuiCCKyvkyKTrvNZoUI0og3gxP4/rUxMegYnRUiCIkXS2WoPqixsGyb98pJKnF3ZYXJFjyP98iP8FSnj5TbwFTx2uoqe76PhmlZfFRupFnc5o0Sx4YS/9+hiyrdO4yHbpj8DDGkEaebJ//O3RtRqVbZm5so0k11wzTBymZZmJbJ9hVl3xeWl078fr0Oj7e2eDxNqjJEnvzGjlfkZ/0dqRc3mu3a2hqTJ22Nzoa0CH/883Z3l5WCaClq0I94778nm8+BntHZbrJcqfDehKRAQd7QOPQCeKUSP/rNXD7+se0c5B1nYUGl/wS7z8nF+BWTpMcRzjitb8WDpBqyDAquB9ncbK/EoxlX37lhQ4ljQ4ljQ4ljQ4ljQ4ljQ4ljQ4ljA634sBCBCdSFCKQA/ASBZ6zjcvksuwAAAABJRU5ErkJggg=='
ͼƬ4 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAMwSURBVGhD7ZvdThpBGEC/5R8LggJWe9XWRMVqL/ypN75Ik75Hn6Hv0aQv4rU2etHGprVJRVu1RQoiUGE733SGTlaERXZnvwVOMsHdTIxnzs4KxjXevH1nwojx+tVLIyC+Hjnaxde2t/mJYWZ3Z4e/jnTxsfio0VW8Wq6AaQ7nTb+r+NnpCRzu70PtuirO0KFwdARfDw87ju/Hx2LW3fS81K/KZfiwu2f+KBRI1S9eXMCvs7OOo1wsill3Y2uPM2EDV5hi/WqlAuXLSz76+dlsiTdqdWi1WqL+e6BUv3rFxEtMnI1a1WHxeu0azk8KfEVNs8X3F9W9bxdb4kiz2eT75/Lnxf/6e7Tq94NtcQnuqXZ9tgB+rd+3ODIM9e8lLvFz/YHEkU71P/qg/sDiErU+LgD1+o6JI36q76i4xA/1XRFHqNd3TVxCtb7r4oilvinrn5+cihn60SIuEfUNWf/bl8/w6eAAGvW6mKEPreKItX65VGKf+Ha119cuLlHr42Loru+ZOOJlfU/FJV7UJyGO6K5PRlyiqz45cUTWr/wu8WNZH//O7xQkxcEwIJlKQyI5KQ6NxuPFRZhIJvixE5ATD0cikJudg2Q6zRcglck0nm9tRVLT02KGM9ARF5VRGuUDgeCf+eVlmM/nI8FQSExyDhLi1srpTOZm9cVm2OnKKt6KWysH/1V+ms+H3Kis4pm4tfJ0Ltda3XS3sop+cUtlVvYGK7O7dsDtyipaxTtVXtnYCOmqrKJH/FblcNOLyiqui9+qPDMDKxvrQS8qq7gmzt5tweTUVLtyKBxu8coLC7ivxSzvcEU8Eo1Cbu4RJCZT7crP1tcDXldWcVRcVs4+nMXCWJpUZRXHxDtVXl5bI1VZZWBxa2U2TKqVVQYSt1aeymZxLxtUK6vcS9xaGcs+WVrig3Jllb7F76jMX/2EbfFulfHYb9gSD0fZu68hqKxiSzwWn5B3bHKVY/E4TCQSfESiMXG2N7YvdazLfi+Tq4xXYTqT5QPl7dJTnGJlJJFMsk98qY4j/qD3AnR9JgX/Qxi/ESXhQbD9TApe1sMibcX2Hh82xuKjxvgRyzEjAcBfnIZW0hne4u4AAAAASUVORK5CYII='
ͼƬ5 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAMTSURBVGhD7Ztra9pQGIBPksVcdOtFLVNcKfVL6y6t9oIf+kcG+x/7Dfsfg/2RftV+moPSwmAfJh2Tts5qEmt23tOkPZNpUzhJ3qgPHNQoeJ7zmAtIpE+fv7hkzvj44b0ke8/njvvitaMjtmGWaR4fs8e5Lr4QnzdmUnzQv/GeTWaq+O92m3w/PZ04sHE7HLJ5/Tg797ZMZqp49/qadC4uJg5MXHU65GujMQo6r0A/dXswIN3LSzZ6dDEw4Vc+b7XI0HEC77qBPmiB+BUVp+NPF484VG41m3eVXZcGsrx3HifwCmGCr+zYtkwH+dX+SW56Xe8Tj5M4cW9fdv3KsPuBNMg/hcSIj+3Lkl8Zdj9YgKeSCHFRlXlQi4uuzINWnB2xG02hlXnQif9zxHZsoZV5UIl75+W7q8IQKvOgEB87L7MRRmWe2MWjrMwTm3gclXliEY+rMk+k4nFX5olMHCp/OzmJtTJP6OJ8ZduyYq3ME6o4tso8oYhjrcwjXBxzZR5h4kmozCNE3LGdh8oUq99HWZlHiLiaUkm5sk0URenBa80wyGouR2QllEOIEITNzEhnyLt6PZ0vFC2XoptpslYoEXjEiNAkkiSRV+VNrVKrSrKi9qH4aj7PBrb6ocwG6u/UD421QtGhBzaU9UPLAPVL5U11m9Z/pqYG2OqHPgOo//bwQH9ZKo0w1Y9k6aF+cWNDhvpqSrMw1I/0W6H+m4N9DUP9yJebr5/SdCeu+vH8zihQ//X+nlpYX4dL2sjrxyYOQH0QZ/V1I9L6sYr7sPp7tUjroxAH+Pqaad6GXR+NuA/Ur1SrStj10YkDfH3dMEdh1Ecp7gP1qbzM6tP+IuujFgfu61d3JSrsiqqPXtyH1afyouonRhwQWT9R4j5j9Vl1qK/pBnsdhEDiqpYiZibDhiHgwCICrj5bCChupIPPLZA4PaWQ5WyOjRcrK95WHID01u4OWwTJ2xaEqeK6aZLnS0sTBxb8+lte/SDM3D0p9GKP/ZuznM16Wx6Y6XtSoP7/pMeZOfGgLMTnjcUtlgvmAkL+AkQMY9xQXMR6AAAAAElFTkSuQmCC'

image_path = r'图片'

layout = [
[sg.Image(data=i) for i in [ͼƬ1,ͼƬ2,ͼƬ3,ͼƬ4,ͼƬ5]]
]

window = sg.Window('python gui',layout,keep_on_top=True)
while True:
    event,vaules = window.read()
    print(vaules)
    if event == None:
        break

window.close()

**UpdateAnimation动图更新方法**

`window[key].update_animation()`  
`window[key].UpdateAnimation()`  

gif 的圖片

import PySimpleGUI as sg
sg.theme('DarkTeal6')


base64_default = sg.DEFAULT_BASE64_LOADING_GIF

layout = [
[sg.Image(data=base64_default,key='-GIF-')]
]

window = sg.Window('python gui',layout,keep_on_top=True)
while True:
    event,vaules = window.read(timeout=10)
    window['-GIF-'].update_animation(source=base64_default,time_between_frames=50)
    print(vaules)
    if event == None:
        break

window.close()

图片切换案例:

import PySimpleGUI as sg
sg.theme('DarkTeal6')


ͼƬ1 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAJ5SURBVGhD7dvLTttAFMbx4xCcWxEuoGxg0bJB6T0mBBa8CFLfo8/Q96jUF2FHYFUqxIJ2QRGNqm5QlSsxmcEHmRSDnWQ854zzR4hgImV+X7hkg/X5y1cPUtanj3tWxr+duu6ecXd3V14wuaP9ffkx1c/4DJ62jIRf9/v+rfCMgndabfh5egpnJyf+lfCMgCP4uNHw/jabAN7TL01Yw+/Ahz7YGr5FjCX8P/CQ3G234d/Vlfx6lFjBw8B/fl/K9163I+8XJRbwABgeAovbcSMNfwAskZOAMZJwlWCMFBzB3xWCMRLwUbD4K6wKjGmF6wBjWuC9bk8bGEsULsDnZz/g28GBNjCWCDwIbl78Gr6UHmgDY0rhCD5u0AFjSuCj4MGADhibKpwDGJsKnBMYmwjOEYyNBecMxmLBTQBjkeAmgbFH4SaCsVC4eEkZBHueJ69xB2Oh8KVyGV5sbMBcdr4lPrcsC5yVFVhYdCCTifWrgWSPCpzlZXi/s11Yr1SGA9gtAV5wHCivrrEfINLJbweoywGytt0xYYBYJxYDvKvXcyYMMNZJgwPM53JdjgNMdEIxwNutLVsMYOfzrAaYysnEAG9qNVYDTPVEwQFy+UKf8gBKTiIGeF3bzFIeQOkJKA+QyCPfG6BYvKYwQKKPKAdw3TkKA2j5XqMwgBY4FhygUCwNkhxAKxwTA1TcaibJAUjAsSQHIAXHggPkiyVPxQAk4ZgY4JVbtVQMQBqOBQcolJ5J8KQDsIBj8keg+gHCBrBiDMAKjoUNsPh8yb/H07GEY6MDxIk1HBtnACPgGA6wtv7SvxKeUXAsyrNuJDxKM3jamv2L5axUBHAD581flhCfpAwAAAAASUVORK5CYII='
ͼƬ2 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAJWSURBVGhD7dtPTxpBHMbx3+6yLK0NRg/YpCT1oodWPSCiJr4Rk76Pvoa+jyZ9I1xFT+XGhcR/COGAoPyVHXmaHtZhkN3ZmVm+CWGZcPk8LNywfv3+M6GE9fPHuWXPrhPXv0+8cHbGDkyuUi6z50R/4it40uLCR8Ph7Mq8uPB6rUa1apV6j53ZiTnNvdXbzSZVL6+MG0D4O27aAELwbqfDHjSZGDOAENz/kWs3H+ju+tqYAYRvdb/RcGDMAAvBkQkDvAuOdB5gKTjScYBQ4EinAUKFIx0GiASOVB4gUjhScQApcPT/AE/dR3YW1wBS4cgfoNVoUONmOkCvy85kDxALHA36fWrd38cyQKxwFMcASsCRzAGUgiMZAygJR1EOoDQcRTGAFnAU5gBawdG8AZ57T+yMl5ZwhAEebm9oPB6zM3+Av5ULuq3X2eu30hpuWRatZbO0kcuRbb9SHMd5/rqzQ1v5PHv9VlrCAc5Ncesbm+TYzhRs97d3d+ng5MTbnA7hv4eXVvAgcCrlzsCnaREw0gLOA+8flxYCI6XhgWDXHSwDRkrCg8CumxoycKnkLgNGSsF54L3ScSoMMFICHgj20qMowChWOBdcPHKiAKNY4HGCkVR4EDjtpccywUgKnAf+XjyyZYJRpHAVwSgSeDDYm6gARqHC+eCipQIYhQLXCYyWggeBvYzaYPQuOA/87VBtMFoIHgj+kCGdwEgIbtkccOGQdAIjIfin7LoxYCR8q5sCRnPhpoERF/75S944MOLCM2sfjQMj4e+4aa3gSWv1F8tViYjoBXy8SJbXZKzgAAAAAElFTkSuQmCC'
ͼƬ3 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAJpSURBVGhD7ZrdbtMwFIBPmp+mbZKuVVRQQaK9YOOCaRPSuNqLIPEePAPvgcSL7G4SN0OCDRATKmJsYe20dc3apsF2TOm6UuKqtHjHn3RUx85FvxzHcY6ivXz1OgZkvHj+TMvwNjqGGX+yvc06bjNvdnbYL+qMK3FsKHFsKHFsKHFsKHFsKHFsKHFsTBU/ajTgw97etTg9PuajcjO1EHF4cHBDNGMYYOg6P1oc9+p1KPk+P5oN4ULE5cUFhGGHtQf9PnSvrhYen9+9j5tBwP7DPEiV8fNWCzqXbcgsIdMUx3XBzhdA0zR4tLkBuYLDRxLoBTnc34c4TuqmbrEID9fXWXuUmUpP/V4PumG4lDglYr1el4k1TwI4PzsbRnD07Zp0WuRY1YlUHA1Yc3zB/fLxE5MOyYxs/Uh/K0jzOIuiCCKyvkyKTrvNZoUI0og3gxP4/rUxMegYnRUiCIkXS2WoPqixsGyb98pJKnF3ZYXJFjyP98iP8FSnj5TbwFTx2uoqe76PhmlZfFRupFnc5o0Sx4YS/9+hiyrdO4yHbpj8DDGkEaebJ//O3RtRqVbZm5so0k11wzTBymZZmJbJ9hVl3xeWl078fr0Oj7e2eDxNqjJEnvzGjlfkZ/0dqRc3mu3a2hqTJ22Nzoa0CH/883Z3l5WCaClq0I94778nm8+BntHZbrJcqfDehKRAQd7QOPQCeKUSP/rNXD7+se0c5B1nYUGl/wS7z8nF+BWTpMcRzjitb8WDpBqyDAquB9ncbK/EoxlX37lhQ4ljQ4ljQ4ljQ4ljQ4ljQ4ljQ4ljA634sBCBCdSFCKQA/ASBZ6zjcvksuwAAAABJRU5ErkJggg=='
ͼƬ4 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAMwSURBVGhD7ZvdThpBGEC/5R8LggJWe9XWRMVqL/ypN75Ik75Hn6Hv0aQv4rU2etHGprVJRVu1RQoiUGE733SGTlaERXZnvwVOMsHdTIxnzs4KxjXevH1nwojx+tVLIyC+Hjnaxde2t/mJYWZ3Z4e/jnTxsfio0VW8Wq6AaQ7nTb+r+NnpCRzu70PtuirO0KFwdARfDw87ju/Hx2LW3fS81K/KZfiwu2f+KBRI1S9eXMCvs7OOo1wsill3Y2uPM2EDV5hi/WqlAuXLSz76+dlsiTdqdWi1WqL+e6BUv3rFxEtMnI1a1WHxeu0azk8KfEVNs8X3F9W9bxdb4kiz2eT75/Lnxf/6e7Tq94NtcQnuqXZ9tgB+rd+3ODIM9e8lLvFz/YHEkU71P/qg/sDiErU+LgD1+o6JI36q76i4xA/1XRFHqNd3TVxCtb7r4oilvinrn5+cihn60SIuEfUNWf/bl8/w6eAAGvW6mKEPreKItX65VGKf+Ha119cuLlHr42Loru+ZOOJlfU/FJV7UJyGO6K5PRlyiqz45cUTWr/wu8WNZH//O7xQkxcEwIJlKQyI5KQ6NxuPFRZhIJvixE5ATD0cikJudg2Q6zRcglck0nm9tRVLT02KGM9ARF5VRGuUDgeCf+eVlmM/nI8FQSExyDhLi1srpTOZm9cVm2OnKKt6KWysH/1V+ms+H3Kis4pm4tfJ0Ltda3XS3sop+cUtlVvYGK7O7dsDtyipaxTtVXtnYCOmqrKJH/FblcNOLyiqui9+qPDMDKxvrQS8qq7gmzt5tweTUVLtyKBxu8coLC7ivxSzvcEU8Eo1Cbu4RJCZT7crP1tcDXldWcVRcVs4+nMXCWJpUZRXHxDtVXl5bI1VZZWBxa2U2TKqVVQYSt1aeymZxLxtUK6vcS9xaGcs+WVrig3Jllb7F76jMX/2EbfFulfHYb9gSD0fZu68hqKxiSzwWn5B3bHKVY/E4TCQSfESiMXG2N7YvdazLfi+Tq4xXYTqT5QPl7dJTnGJlJJFMsk98qY4j/qD3AnR9JgX/Qxi/ESXhQbD9TApe1sMibcX2Hh82xuKjxvgRyzEjAcBfnIZW0hne4u4AAAAASUVORK5CYII='
ͼƬ5 = b'iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAAMTSURBVGhD7Ztra9pQGIBPksVcdOtFLVNcKfVL6y6t9oIf+kcG+x/7Dfsfg/2RftV+moPSwmAfJh2Tts5qEmt23tOkPZNpUzhJ3qgPHNQoeJ7zmAtIpE+fv7hkzvj44b0ke8/njvvitaMjtmGWaR4fs8e5Lr4QnzdmUnzQv/GeTWaq+O92m3w/PZ04sHE7HLJ5/Tg797ZMZqp49/qadC4uJg5MXHU65GujMQo6r0A/dXswIN3LSzZ6dDEw4Vc+b7XI0HEC77qBPmiB+BUVp+NPF484VG41m3eVXZcGsrx3HifwCmGCr+zYtkwH+dX+SW56Xe8Tj5M4cW9fdv3KsPuBNMg/hcSIj+3Lkl8Zdj9YgKeSCHFRlXlQi4uuzINWnB2xG02hlXnQif9zxHZsoZV5UIl75+W7q8IQKvOgEB87L7MRRmWe2MWjrMwTm3gclXliEY+rMk+k4nFX5olMHCp/OzmJtTJP6OJ8ZduyYq3ME6o4tso8oYhjrcwjXBxzZR5h4kmozCNE3LGdh8oUq99HWZlHiLiaUkm5sk0URenBa80wyGouR2QllEOIEITNzEhnyLt6PZ0vFC2XoptpslYoEXjEiNAkkiSRV+VNrVKrSrKi9qH4aj7PBrb6ocwG6u/UD421QtGhBzaU9UPLAPVL5U11m9Z/pqYG2OqHPgOo//bwQH9ZKo0w1Y9k6aF+cWNDhvpqSrMw1I/0W6H+m4N9DUP9yJebr5/SdCeu+vH8zihQ//X+nlpYX4dL2sjrxyYOQH0QZ/V1I9L6sYr7sPp7tUjroxAH+Pqaad6GXR+NuA/Ur1SrStj10YkDfH3dMEdh1Ecp7gP1qbzM6tP+IuujFgfu61d3JSrsiqqPXtyH1afyouonRhwQWT9R4j5j9Vl1qK/pBnsdhEDiqpYiZibDhiHgwCICrj5bCChupIPPLZA4PaWQ5WyOjRcrK95WHID01u4OWwTJ2xaEqeK6aZLnS0sTBxb8+lte/SDM3D0p9GKP/ZuznM16Wx6Y6XtSoP7/pMeZOfGgLMTnjcUtlgvmAkL+AkQMY9xQXMR6AAAAAElFTkSuQmCC'

image_path = r'图片'
data_list = [ͼƬ1,ͼƬ2,ͼƬ3,ͼƬ4,ͼƬ5]
layout = [
[sg.Image(data=ͼƬ1,
          background_color='black',
          # 背景颜色设定
          size=(112, 111),
          # 图片 宽度和高度设定(pix)
          pad=None,
          # 和周围元素间的间隔 ((int,int),(int,int))
          # 左右上下顺序
          key='-IMAGE-',
          # 元素的唯一标识符
          tooltip='SHUJU+',
          # 元素的悬浮文本

          right_click_menu=['开始',['图片切换','退出界面']],
          # 右击调出菜单  ['开始',['开始','中止','结束']]

          visible=True,
          # 元素可见状态 bool

          enable_events=True,
          # 元素事件属性,默认为False
          )]]

window = sg.Window('python gui',layout,keep_on_top=True)
i = 0
while True:
    event,vaules = window.read()
    print(vaules)
    if event == None:
        break
    if event == '图片切换':
        window['-IMAGE-'].update(data=data_list[i])
        i = i + 1 if i < 9 else 0
    if event == '退出界面':
        window.close()

window.close()

3.1 列元素介绍

一个容器元素,用于在窗口的布局中创建布局



`sg.Column()`or`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
sg.theme('DarkTeal6')

col_layout = [[sg.Text('姓名')]] + [[sg.In(size=(10,1))]]
# + \             # [[sg.Text('性別')]] + [[sg.Input(size=(10,1))]]

layout = [[sg.Col(col_layout,
                  background_color='green',
                  # size=(100,200),
                  # scrollable=True,
                  # vertical_scroll_only=True,
                  element_justification="center",
                  expand_x=True,
                  expand_y=True,
                  grab=True,
                  ),sg.LBox(list(range(1,10)),size = (10,6))]]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break

window.close()

3.2 框架元素

        容器元素,可以存放其他元素。  四周有线条围绕和一个文本元素作为标题

`sg.Frame()`


```python

Frame(
    title,
    # 标题文本
    # str

    layout,
    # 容器内元素布局
    # [[sg.In()]]

    title_color=None,
    # 标题文本颜色设定

    background_color=None,
    # 框架元素背景颜色

    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

    size=(None, None),
    # 元素的宽度和行高
    # 偶尔不起作用

    font=None,
    # 可以设置字体名称,大小等等

    pad=None,
    # 和周围元素间隔的设定((left, right), (top, bottom))

    border_width=None,
    # 框架元素的线条宽度

    key=None,
    # 框架元素的唯一标识符

    tooltip=None,
    # 悬浮文本

    right_click_menu=None,
    # 右击调出菜单

    visible=True,
    # 元素可见状态设定

    element_justification="left",
    # 框架内元素的对齐方式
    # 有效值 left,right,center

    vertical_alignment=None,
    # 垂直对齐方式
    # top bottom center
    # 支持首字母简写
       )
```

标题位置的方位显示

例子:

import PySimpleGUI as sg
sg.theme('DarkTeal6')

fra_layout = [[sg.Text('姓名')]] + [[sg.In()]]+\
             [[sg.Text('性別')]] + [[sg.Input()]]+ \
             [[sg.Text('國籍')]] + [[sg.Input()]]

layout = [[sg.Frame(title='基本信息栏目',
                    layout=fra_layout,
                    title_location='nw' ,
                    background_color = 'blue',
                    title_color='white',
                    relief="groove",
                    right_click_menu=['开始',['开始','結束']],
)] ]

window = sg.Window('python gui',layout,keep_on_top=True)

while True:
    event,vaules = window.read()
    if event == None:
        break

window.close()

案例 2:

import PySimpleGUI as sg
sg.theme('DarkTeal6')

fra1_layout =[
             [sg.Text('姓名'),sg.Input()],
            [sg.Text('性別'), sg.Input()],
             [sg.Text('國籍'),sg.Input()],
            ]
fra2_layout = [[sg.Listbox(list(range(12)),size=(20,6))]]

layout = [[sg.Button('界面切换1',key='-ui1-')],
        [sg.Frame(title='基本信息栏目',key='-fra1-',layout=fra1_layout,title_location='nw'),
         sg.Frame('listbox', layout=fra2_layout,visible=False,key='-fra2-')] ]

window = sg.Window('python gui',layout,keep_on_top=True)

result = True
while True:
    event,vaules = window.read()
    if event == None:
        break
    if event == '-ui1-':
        window['-fra2-'].update(visible=result)
        window['-fra1-'].update(visible=not result)
        result = not result


window.close()

import PySimpleGUI as sg
sg.theme('DarkTeal6')

fra1_layout =[
             [sg.Text('姓名'),sg.Input()],
            [sg.Text('性別'), sg.Input()],
             [sg.Text('國籍'),sg.Input()],
            ]
fra2_layout = [[sg.Listbox(list(range(12)),size=(20,6))]]

col_layout=[[sg.Frame('基本信息栏目',fra1_layout,key='-fra1-')],[sg.Button(i) for i in  ['提交','更新']]]
layout = [[sg.Button('界面切换1')],
        [sg.Col(col_layout,key='-col1-'),
         sg.Frame('listbox', layout=fra2_layout,visible=False,key='-fra2-')]]

window = sg.Window('python gui',layout,keep_on_top=True)

result = True
while True:
    event,vaules = window.read()
    if event == None:
        break
    if event == '界面切换1':
        window['-fra2-'].update(visible=result)
        window['-col1-'].update(visible=not result)
        result = not result


window.close()

3.3标签元素 Tab & TabGroup

```
sg.TabGroup(
           [[sg.Tab('Tab1',tab1_layout,),sg.Tab('Tab2',tab2_layout)]],
               )
```
注意事项:(1.TabGroup(layout),   2.Tab1和Tab2要写在一行里面。)   

```python
Tab(
    title,
    # str
    # 标签上显示的文本
    layout,
    # 标签内包含的布局

    background_color=None,
    # 标签的背景颜色设定

    font=None,
    # 字体名称,大小设定

    pad=None,
    # 周围元素的间隔设定

    disabled=False,
    # 禁用状态设定

    border_width=None,
    # 边界线宽度设定

    key=None,
    # 元素的唯一标识符

    tooltip=None,
    # 悬浮文本设定

    right_click_menu=None,
    # 右击调出菜单

    visible=True,
    # 元素可见状态设定

    element_justification="left",
    # 容器内元素的对齐方式
    # 有效值 left,right,center
       )
```

案例:

import PySimpleGUI as sg


tab1_layout=[
        [sg.Text('姓名',size=(8,1)),sg.In()],
        [sg.Text('性别',size=(8,1)),sg.In()],
        [sg.Text('国籍',size=(8,1)),sg.In()]]

col_layout=[
        [sg.Text('姓名',size=(3,1)),sg.In(size=(3,1))],
        [sg.Text('性别',size=(3,1)),sg.In(size=(3,1))],
        [sg.Text('国籍',size=(3,1)),sg.In(size=(3,1))]]

tab2_layout=[[sg.LB(list(range(15)),size=(20,6)),
                sg.TabGroup([[sg.Tab('1',[[sg.CB(i)]for i in range(2)]),
                                sg.Tab('2',[[sg.Combo(list(range(15)),size=(10,3))]])]]),
            sg.Col(col_layout)],[
            sg.Frame('slider',[[sg.Slider(orientation='h',size=(50,10))]])]]

layout=[[sg.TabGroup([[ sg.Tab('tab1',tab1_layout,title_color='blue',),sg.Tab('tab2',tab2_layout) ]])]]

window=sg.Window('Python GUI',layout,keep_on_top=True)

result=True

while True:
    event,values=window.read()
    print(event)
    if event==None:
        break

window.close()

 4.1 颜色选择器 

`sg.ColorChooserButton()`

将16进制颜色码(hex)赋值给目标元素   


```python

ColorChooserButton(

    button_text,
    # 按钮元素要显示的文本
    target=key, 
    # 显示颜色码的目标元素的key


    ------------------------
    image_filename=None,
    image_data=None,
    image_size=(None, None),
    image_subsample=None,
    tooltip=None,
    border_width=None,
    size=(None, None),
    auto_size_button=None,
    button_color=None,
    disabled=False,
    font=None,

    bind_return_key=False,
    # 绑定回车键
    # 按一下回车键,调出颜色选择界面。

    focus=False,
    pad=None,
    key=None,

           )
 
```

练习:

import PySimpleGUI as sg

layout=[[sg.ColorChooserButton('颜色选择器',target='-color-',key='-CCB-',bind_return_key=True)],
        [sg.InputText(key='-color-',enable_events=True)]]
window=sg.Window('Python GUI',layout,keep_on_top=True)
while True:
    event,values=window.read()
    print(event)
    if event==None:
        break
    if event == '-color-':
        window['-CCB-'].update(button_color=('white',values['-color-']))

window.close()

4.2文件选择器

`sg.FileBrowse()`

点击按钮选择文件后,可以获得文件的绝对路径。   



```python

FileBrowse(
    
    button_text="Browse",
    # 按钮元素上要显示的文本

    target=key,
    # 显示路径的目标元素的key

    file_types=(('ALL Files', '*.*'),),

    # 只显示指定的文件类型  '*.pdf'

    # 只显示指定的文件名称  'text.*'

    initial_folder=None,
    # 默认路径设定


    -----------------------------
    tooltip=None,
    size=(None, None),
    auto_size_button=None,
    button_color=None,
    enable_events=False,
    font=None,
    disabled=False,
    pad=None,
    key=None,
            ) 

```

案例:

import PySimpleGUI as sg

layout=[[sg.FileBrowse(target='-IN-',file_types=(('ALL Files', '*.*'),), initial_folder=r'C:\Users\86181\Desktop\test\image1')],[sg.Input(key='-IN-')]]

window=sg.Window('Python GUI',layout,keep_on_top=True)
while True:
    event,values=window.read()
    print(event)
    if event==None:
        break

window.close()

4.3文件另存为&文件夹选择器

文件另存为  

`sg.FileSaveAs()`

注意: 文件名重复时系统会提醒文件名重复。

```
FileSaveAs(
    button_text="Save As...",
    target=key,
    file_types=(('ALL Files', '*.*'),),
    initial_folder=None,
    disabled=False,
    tooltip=None,
    size=(None, None),
    auto_size_button=None,
    button_color=None,
    enable_events=False,
    font=None,
    pad=None,
    key=None,
            )
```

文件夹选择器   

`sg.FolderBrowse()`

```
FolderBrowse(
    button_text="Browse",
    target=key,
    initial_folder=None,
    tooltip=None,
    size=(None, None),
    auto_size_button=None,
    button_color=None,
    disabled=False,
    enable_events=False,
    font=None,
    pad=None,
    key=None,
            )           
```

import PySimpleGUI as sg

layout=[[sg.Input(),sg.FileSaveAs()]]

window=sg.Window('Python GUI',layout,keep_on_top=True)
while True:
    event,values=window.read()
    print(event)
    if event==None:
        break

window.close()

如果不设定target,
路径默认显示到为选择器同行且左边的第一个输入框。

[[sg.In(),sg.FileSaveAs()]]

左边没有输入框,默认显示到最右边的单行显示/输入框里。   

[[sg.FileSaveAs(),sg.In(),sg.In(),]]

4.4 日历选择器

``python
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,
    month_names=None,
    day_abbreviations=None,
    title="Choose Date",
    no_titlebar=True,
    location=(None, None),
    -------------------------------------

    image_filename=None,
    image_data=None,
    image_size=(None, None),
    image_subsample=None,
    
    tooltip=None,
    border_width=None,
    size=(None, None),
    auto_size_button=None,
    button_color=None,
    disabled=False,
    font=None,
    bind_return_key=False,
    focus=False,
    pad=None,
    enable_events=None,
    key=None,

            )

            ```
## 

例子:

import PySimpleGUI as sg

month = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
week = ['周日','周一','周二','周三','周四','周五','周六']

layout=[[sg.In(),sg.CalendarButton(button_text='日历选择',
           close_when_date_chosen=False,
           # 选择日期后 日历界面关闭
           default_date_m_d_y=(1, 10, 1994),
           # 默认值设定
           locale=None,
           format="%Y-%m-%d %H:%M:%S",
           begin_at_sunday_plus=0,
           month_names=None,
           day_abbreviations=None,
           title="Choose Date",
           no_titlebar=True,
           location=(None, None),
                                   )]]

window=sg.Window('Python GUI',layout,keep_on_top=True)
while True:
    event,values=window.read()
    print(event)
    if event==None:
        break

window.close()

4.5  预设按钮介绍

例子:

import PySimpleGUI as sg

def CA(button_text,color_text):
    return  [sg.Button(button_text,size=(15,1),
              font=('黑体',12),button_color=(color_text,'blue'))]


layout=[CA('確定',color_text='yellow'),
        CA('提交',color_text='white'),
        CA('取消按钮',color_text='red'),
         ]

window=sg.Window('Python GUI',layout,keep_on_top=True)
while True:
    event,values=window.read()
    print(event)
    if event==None:
        break

window.close()

5.1 预设弹窗介绍

**弹窗的作用**   

弹窗可以包含内容是个可变参数。    
等效于print语句,暂停程序的运行,让用户读取一些错误信息
 

Popup弹窗介绍

`sg.popup()`or`sg.Popup()`

```python

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
    # 模态窗口设定。
    # 除非关闭此窗口否则其他界面不能进行操作。

    )
```

例子:

import PySimpleGUI as sg


layout=[[sg.OK()]]

window=sg.Window('Python GUI',layout,keep_on_top=True)
while True:
    event,values=window.read()
    print(event)
    if event == None:
        break
    if event == 'OK':
        sg.popup('tets'*50,location=(0,0),modal=False)

window.close()

5.2 弹窗介绍PopupGetText

弹窗特征:   

显示带有文本输入字段的弹出窗口。  

返回输入的文本,如果关闭/取消则返回None。  

`sg.PopupGetText()`or
`sg.popup_get_text()`


```python
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,其他界面无法操作。

    )
```

例子:

import PySimpleGUI as sg

pw = '123'
for i in range(5):
     result = sg.PopupGetText('请输入密码!')
     if result == pw:
         sg.popup('密码正确,开始登录!')
         break
     else:
         sg.popup('密码错误请重新输入!')


layout=[[sg.Input()]for i in range(5)]

window=sg.Window('Python GUI',layout,keep_on_top=True)
while True:
    event,values=window.read()
    print(event)
    if event == None:
        break

window.close()

5.3 弹窗介绍PopupGetFile

弹窗特征:   

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

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
    # 模态窗口)

   

5.4 弹窗介绍PopupGetFolder

弹窗特征:   

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

`sg.PopupGetFolder()`or   
`sg.popup_get_folder()`


```python
PopupGetFolder(
    message,
    title=None,
    default_path="",
    no_window=False,
    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),
    initial_folder=None,
    image=None,
    modal=True)


```

5.5 弹窗介绍PopupAnnoying

弹窗特征:

没有标题栏,可以随意移动窗口。

```python
PopupAnnoying(
    args=*<1 or N object>,
    title=None,
    button_color=None,
    background_color=None,
    text_color=None,
    auto_close=False,
    auto_close_duration=None,
    non_blocking=False,
    font=None,
    grab_anywhere=True,
    keep_on_top=False,
    location=(None, None),
    image=None,
    modal=True)

```
5.6 弹窗介绍PopupAutoClose

弹窗特征:   

显示一段时间后自动关闭窗口。

```python
PopupAutoClose(
    args=*<1 or N object>,
    title=None,
    button_color=None,
    background_color=None,
    text_color=None,
    auto_close=True,
    auto_close_duration=None,
    non_blocking=False,
    font=None,
    no_titlebar=False,
    grab_anywhere=False,
    keep_on_top=False,
    location=(None, None),
    image=None,
    modal=True)

```

5.7 弹窗介绍PopupCancel

弹窗特征:   

含有一个Cancelled的按钮。

```python
PopupCancel(args=*<1 or N object>,
    title=None,
    button_color=None,
    background_color=None,
    text_color=None,
    auto_close=False,
    auto_close_duration=None,
    non_blocking=False,
    font=None,
    no_titlebar=False,
    grab_anywhere=False,
    keep_on_top=False,
    location=(None, None),
    image=None,
    modal=True)

```

5.8 弹窗介绍PopupOKCancel

弹窗特征: 

弹窗含有OK和Cancel两个按钮。

```python
PopupOKCancel(args=*<1 or N object>,
    title=None,
    button_color=None,
    background_color=None,
    text_color=None,
    auto_close=False,
    auto_close_duration=None,
    non_blocking=False,
    icon=...,
    line_width=None,
    font=None,
    no_titlebar=False,
    grab_anywhere=False,
    keep_on_top=False,
    location=(None, None),
    image=None,
    modal=True)

```

5.9 弹窗介绍PopupError

弹窗特征:   

含有一个带有颜色的Error按钮

```python

PopupError(args=*<1 or N object>,
    title=None,
    button_color=(None, None),
    background_color=None,
    text_color=None,
    auto_close=False,
    auto_close_duration=None,
    non_blocking=False,
    line_width=None,
    font=None,
    no_titlebar=False,
    grab_anywhere=False,
    keep_on_top=False,
    location=(None, None),
    image=None,
    modal=True)
```

5.10 弹窗介绍PopupNoButtons

弹窗特征:   

显示无按钮的弹窗。

```python

PopupNoButtons(args=*<1 or N object>,
    title=None,
    background_color=None,
    text_color=None,
    auto_close=False,
    auto_close_duration=None,
    non_blocking=False,
    line_width=None,
    font=None,
    no_titlebar=False,
    grab_anywhere=False,
    keep_on_top=False,
    location=(None, None),
    image=None,
    modal=True)

```

5.11 弹窗介绍PopupNoWait

弹窗特征: 

显示弹出窗口并立即返回

```python

PopupNoWait(args=*<1 or N object>,
    title=None,
    button_color=None,
    background_color=None,
    text_color=None,
    auto_close=False,
    auto_close_duration=None,
    non_blocking=True,
    line_width=None,
    font=None,
    no_titlebar=False,
    grab_anywhere=False,
    keep_on_top=False,
    location=(None, None),
    image=None,
    modal=False)

```

6.1 菜单栏 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='UU')]]+[[sg.In(key=i)]for i in range(5)]
window=sg.Window('Python GUI',layout,keep_on_top=True)

while True:
    event,values=window.read()
    print(event)   
    if event==None:  
        break

window.close()

效果图:

  

6.2 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
		)

```

6.3 Multiline多行文本框

Multiline(
	default_text="",
    # 默认显示的文本
    disabled=False,
    # 元素禁用状态设定
    border_width=None,
    # 边界线条宽度设定
    size=(None, None),
    # 宽度和行高设定
    background_color=None,
    # 背景颜色设定
    text_color=None,
    # 文本颜色设定
    enable_events=False,
    # 元素事件属性
    key=None,
    # 元素的唯一标识符
    write_only=False,
    # 设定为True时,文本框只提供用户写入,窗口不读取。无返回值。
    reroute_stdout=False,
    # print语句内容会显示在此文本框内
    reroute_cprint=False,
    # 使用cprint将内容打印到此文本框内。详细参考sg.cprint()
    reroute_stderr=False,
    # 捕捉异常时将文本写在此元素内. sys.stderr.write('?')
    autoscroll=False,
    # 如果为True,更多数据添加到末尾时元素的内容将自动滚动
    focus=False,
    # 焦点设置
    font=None,
    # 字体名称和大小设定
    pad=None,
    # 和周围元素间间隔的设定
    tooltip=None,
    # 悬浮文本设定
    justification=None,
    # 对齐方式设定
    right_click_menu=None,
    # 右击调出菜单设定
    visible=True,
    # 元素可见状态设定。
    do_not_clear=True,
    # 默认为True,如果设定为False,窗口读取一次,内容就会自动清除。
     )
```

案例:

import PySimpleGUI as sg

layout=[[sg.Multiline(
    disabled=False,
    # 元素禁用状态设定
    border_width=None,
    # 边界线条宽度设定
    size=(50, 10),
    # 宽度和行高设定
    background_color='gray',
    # 背景颜色设定
    text_color='red',
    # 文本颜色设定
    enable_events=True,
    # 元素事件属性
    key='-key-',
    # 元素的唯一标识符
    write_only=False,
    # 设定为True时,文本框只提供用户写入,窗口不读取。无返回值。
    reroute_stdout=True,
    # print语句内容会显示在此文本框内
    reroute_cprint=False,
    # 使用cprint将内容打印到此文本框内。详细参考sg.cprint()
    reroute_stderr=False,
    # 捕捉异常时将文本写在此元素内. sys.stderr.write('?')
    autoscroll=False,
    # 如果为True,更多数据添加到末尾时元素的内容将自动滚动
    focus=False,
    # 焦点设置
    font=None,
    # 字体名称和大小设定
    pad=None,
    # 和周围元素间间隔的设定
    tooltip=None,
    # 悬浮文本设定
    justification=None,
    # 对齐方式设定
    right_click_menu=None,
    # 右击调出菜单设定
    visible=True,
    # 元素可见状态设定。
    do_not_clear=True,)]]


window=sg.Window('Python GUI',layout,keep_on_top=True)

while True:
    event,values=window.read()
    print(values)
    if event==None:
        break

window.close()

6.4 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
    #文本对齐方式)

案例:

import PySimpleGUI as sg

layout=[[sg.Multiline(
    default_text="hello",
    disabled=False,
    size=(50, 10),
    enable_events=True,
    # 元素事件属性
    key='-key-',
    # 元素的唯一标识符
    write_only=False,
    # 设定为True时,文本框只提供用户写入,窗口不读取。无返回值。
    reroute_stdout=True,
    # print语句内容会显示在此文本框内
    reroute_cprint=True)]]+[[sg.OK()]]+[[sg.Cancel()]]


window=sg.Window('Python GUI',layout,keep_on_top=True)

while True:
    event,values=window.read()
    if event==None:
        break
    if event == 'OK':
        print('OK')
    if event == 'Cancel':
        sg.cprint('Cancel','--FROM CANCEL BUTTON',
                  end=';',
                  sep='+',
                  colors='blue',
                  justification='l')

window.close()
**update方法**
```python
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
    # 更新文本对齐方式)
```

6.5 print方法

`window[key].print()`

```python

print(
    args=*<1 or N object>,
    # 可变参数
    end=None,
    # 要打印的元素的结束符 默认为换行 end='\n'
    sep=None,
    # 要打印的元素的分隔符 默认为空格 sep=' '
    text_color=None,
    # 要打印的元素文本颜色
    background_color=None,
    # 要打印的元素这一行的背景颜色
    justification=None
    # 要打印的元素对齐方式
    )

```

6.6 垂直分割线

sg.VerticalSeparator(
    color=None,
    key=None,
    pad=None
    )
```

案例:

import PySimpleGUI as sg

layout=[[sg.Multiline(
    default_text="hello",
    disabled=False,
    size=(50, 10),
    enable_events=True,
    # 元素事件属性
    key='-key-',
    # 元素的唯一标识符
    write_only=False,
    # 设定为True时,文本框只提供用户写入,窗口不读取。无返回值。
    reroute_stdout=True,
    # print语句内容会显示在此文本框内
    reroute_cprint=True,
    autoscroll=True,
    do_not_clear=True,
            )]]+[[sg.OK(),sg.VerticalSeparator(color='yellow',key=None,pad=None),sg.Cancel()]]


window=sg.Window('Python GUI',layout,keep_on_top=True)

while True:
    event,values=window.read()
    if event==None:
        break
    if event == 'OK':
        window['-key-'].print('123',
               justification='r',
               text_color='red',
                background_color='gray')
    if event == 'Cancel':
        window['-key-'].print('456',
                              justification='l',
                              text_color='blue',
                              background_color='yellow')

window.close()

  这套笔记断断续续整理了一个多月了,人比较懒,那就先记录这了,欢迎各位大佬指点。

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于一个想要学习Python编程语言的初学者来说,千锋教育推出的Python全套视频教程800集(完整版)笔记是非常实用的学习资源。千锋教育是一家知名的IT培训机构,拥有多年的教育经验,其教学质量得到业内的认可。其Python全套视频教程涉及了Python语言的基本语法、面向对象编程、Web开发、数据分析等方面,内容涵盖面非常广泛。在学习过程中,可以根据自己的兴趣和需求选择对应的部分进行学习。 通过学习这套课程,初学者可以掌握Python语言的基本知识,并具备独立编写程序的能力。此外,这套课程还包含了丰富的实例演示,让学生了解如何将所学的知识应用到实际情况中。可帮助学生快速投身行业。这套课程最大的优势是实践讲解,将所学知识融入到实际项目中,让学生更容易理解和掌握。在学习过程中,千锋教育还准备了丰富的练习题和课程答疑,能够帮助学生更好地巩固所学的知识,最终能够应用到实际工作中。 不过需要指出的是,这套课程需要花费一定的时间和精力进行学习,需要学生具备一定的计算机基础,并具备良好的英语阅读能力。同时,由于Python语言更新速度较快,部分课程内容可能不太适用于新版Python,因此需要学生自行查找更加符合自己需求的学习材料进行学习。总之,如果有一定的计算机基础,想要系统地学习Python编程语言的初学者,这套Python全套视频教程800集(完整版)笔记是不错的学习资源。 ### 回答2: 千锋教育Python全套视频教程800集(完整版)笔记是一份非常全面的Python学习资料,能够帮助学员从零开始系统地学习Python编程,深入了解Python语言的各种特性和常见应用。 根据笔记的内容,首先是Python的基础语法,包括变量类型、运算符、控制流、函数等,这些基础知识是Python编程的基础,也是日常编程中必不可少的一部分。 接下来是Python面向对象编程方面的内容,包括类、继承、多态、封装等,这是Python的一大特色,也是Python最为优秀的一个特性。 在这份笔记中,还涉及到了Python的常用模块,如datetime、os、re等,以及Python的网络编程、图形界面设计、数据可视化等方面的应用。 总之,这份笔记涵盖了Python编程的方方面面,对于初学者来说是一份非常宝贵的学习资源,对于已经掌握Python语言开发者来说,也可以作为一份全面的Python编程参考资料。此外,这份笔记还有助于学员加深对Python编程的了解和认知,提高自己的编程能力。 ### 回答3: 千锋教育Python全套视频教程800集的完整版笔记,是一份非常详细的学习资料,内容涵盖了Python语言的基础知识、编程思想和实践技能。这套教程是由千锋教育专家团队精心制作的,内容充实、简明易懂,适合初学者和有一定基础的学员。 笔记的主要内容包括:Python语言入门、数据类型与运算符、流程控制语句、函数与模块、面向对象编程、文件操作、网络编程、Web开发等。通过这些笔记,你可以快速地了解Python这门语言的特点和用途,掌握Python的核心语法,学会使用Python进行编程、数据处理和Web开发等工作。 此外,千锋教育Python全套视频教程800集的完整版笔记,也提供了大量的练习题和实践项目。通过这些练习题和项目,你可以加深对Python语言的理解和应用,更好地实践所学知识。 总之,千锋教育Python全套视频教程800集的完整版笔记是一份非常有价值的学习资料,无论你是初学者还是已经有一定基础的学员,都可以从中获得很多收获,快速地掌握Python编程和开发的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值