advPython-5

pySimpleGUI-学习篇

(0) 通用属性

""" 设定方法 """
key = '-Text-',  # 元素唯一标识符,书写规范key='-NMAE-'。用于元素的定位
size = (None, None),  # 元素宽度,行高(int,int)
font = None,  # 设定字体名称,大小,font='宋体',font=('宋体', int) or font=['宋体',int]
auto_size_text = None,  # 当设定值为True时,窗口自动适应文本大小
enable_events = None,  # bool: 事件触发属性
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  (左右,上下) or ( (左,右),  (上,下) ) or 根据左边规则进行自由搭配
right_click_menu = ['1', ['1', '2', '3']],
# 右击调出菜单,List[    List[  Union[List[str],str]  ]    ] 设定后,右击此元素可以调出菜单
grab = None,  # 如果为真,点此元素可以移动拖拽窗口
tooltip = None,  # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
visible = True  # bool: 元素可见状态
button_color = None,  # 按键的颜色
disabled = False,  # 元素禁用设定

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

(1) 编写第一个界面

# 1)导入库
import PySimpleGUI as gui

# 2)定义布局,确定行数
page = [
    [gui.Text('请输入您的基本信息')],
    [gui.Text("姓名"), gui.InputText()],
    [gui.Text("性别"), gui.InputText()],
    [gui.Text("国籍"), gui.InputText()],
    [gui.Button("确定"), gui.Button("取消")]
]

# 3)创建窗口
page_window = gui.Window('Py_GUI', page)

# 4)事件循环
while True:
    event, values = page_window.read()  # 窗口的读取,有两个返回值(1.事件 2.值)
    if event == None:  # 窗口关闭事件
        break

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

""" 模板 """
# import PySimpleGUI as sg
#
# layout = [
#     ...
# ]
#
# window = sg.Window('pySimpleGUI', layout)
#
# while True:
#     event, values = window.read()
#     print(event, values)
#
#     if not event:
#         break
#
# window.close()

(2) 定义窗口返回值|事件

""" 公用部分 """
# 1)导入库
import PySimpleGUI as gui

# 2)定义布局,确定行数
page = [
    [gui.Text('请输入您的基本信息')],
    [gui.Text("姓名"), gui.InputText()],
    [gui.Text("性别"), gui.InputText()],
    [gui.Text("国籍", enable_events=True), gui.InputText()],
    [gui.Button("确定"), gui.Button("取消")]
]

# 3)创建窗口
page_window = gui.Window('Py_GUI', page)
""" 非公用部分 """

""" 方法一 """

# # 4)事件循环
# while True:
#     event, values = page_window.read()  # 窗口的读取,有两个返回值(1.事件 2.值)
#     if event == None:  # 窗口关闭事件
#         break
#     if event == "确定":
#         gui.Popup('执行了确认任务')  # popup 是弹窗的意思
#     if event == "取消":
#         gui.Popup("执行了取消")
#
# # 5)关闭窗口
# page_window.close()

""" 方法二 """

# # 4)事件循环
# while True:
#     event, values = page_window.read()  # 窗口的读取,有两个返回值(1.事件 2.值)
#     if event == None:  # 窗口关闭事件
#         break
#     if event in ("确定", "取消"):
#         gui.Popup('执行完毕')  # popup 是弹窗的意思
#
# # 5)关闭窗口
# page_window.close()

""" 方法三 """
# 4)事件循环
while True:
    event, values = page_window.read()  # 窗口的读取,有两个返回值(1.事件 2.值)
    if event == None:  # 窗口关闭事件
        break
    if event.startswith("确定"):
        gui.Popup('执行确定')  # popup 是弹窗的意思
    if event.endswith("取消"):
        gui.Popup('执行取消')

    if event == '国籍':
        gui.Popup('这是个文本,点了也没用')

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

(3) 从窗口读取返回值

""" 第一部分 """
# # 1)导入库
# import PySimpleGUI as gui
#
# # 2)定义布局,确定行数
# page = [
#     [gui.Text('请输入您的基本信息')],
#     [gui.Text("姓名"), gui.InputText()],
#     [gui.Text("性别"), gui.InputText()],
#     [gui.Text("国籍"), gui.InputText()],
#     [gui.Button("确定"), gui.Button("取消")]
# ]
#
# # 3)创建窗口
# page_window = gui.Window('Py_GUI', page)
#
# # 4)事件循环
#
# while True:
#     event, values = page_window.read()  # 窗口的读取,有两个返回值(1.事件 2.值)
#     if event == None:  # 窗口关闭事件
#         break
#     if event == '确定':
#         print(values)
# # 5)关闭窗口
# page_window.close()

""" 第二部分 """

# 1)导入库
import PySimpleGUI as gui

# 2)定义布局,确定行数
page = [
    [gui.Text('请输入您的基本信息')],
    [gui.Text("姓名"), gui.InputText(key='name')],
    [gui.Text("性别"), gui.InputText(key='gender')],
    [gui.Text("国籍"), gui.InputText(key='nationality')],
    [gui.Button("确定"), gui.Button("取消")]
]

# 3)创建窗口
page_window = gui.Window('Py_GUI', page)

# 4)事件循环

while True:
    event, values = page_window.read()  # 窗口的读取,有两个返回值(1.事件 2.值)
    if event == None:  # 窗口关闭事件
        break
    if event == '确定':
        print(values)
# 5)关闭窗口
page_window.close()

(4) 主题

import PySimpleGUI as psg

# 查看主题(这些主题是内置在库里面的):
# psg.theme_previewer()

# 获取所有’有效主题‘的一个列表,列表里面有主题的名称,可以将它复制下来
# print(psg.theme_list())


# 获取一个主题,并粗略地看看它的效果
# psg.theme("Black")
# psg.Popup("弹窗演示")

# 随机获取一个主题。可以到’运行台‘的中的最后一句,查看当前主题的名称
while True:
    psg.theme('')
    psg.Popup("弹窗演示")
    if input(" q 退出").strip().lower() == 'q':
        break

(5) 修改主题

import PySimpleGUI as psg

psg.theme('LightBlue2')
psg.Popup('演示弹窗', "请记住!当前按键字体‘OK’的颜色")
# print(psg.theme_button_color())
psg.theme_button_color(('yellow', '#7186C7'))
psg.Popup("演示弹窗", "按键字体‘OK’已经变黄色")

(6) 自定义窗口元素

""" for循环快速布局 """
# import PySimpleGUI as sg
#
# layout = [
#     [sg.Text(i) for i in 'ABCD'],
#     [[sg.Text(i)] for i in 'ABCD'],
#     [sg.In(i) for i in ['北京', '上海', '广州', '深圳']],  # In是InputText的缩写
#     [[sg.In(i)] for i in ['北京', '上海', '广州', '深圳']]
# ]
# w = sg.Window('Py pySimpleGUI', layout)
# while True:
#     event, values = w.read()
#     if event == None:
#         break
#
# w.close()


""" 另一种组合方式进行布局"""
import PySimpleGUI as sg

# 新式
# layout = [
#              [sg.Text("请输入基本信息")],
#
#              [sg.Text("姓名")] + [sg.In()]] + [
#              [sg.Text("性别")] + [sg.In()]] + [
#              [sg.Text("国籍")] + [sg.In()],
#
#              [sg.B('确认'), sg.B('取消')]  # B 是Button的缩写
#          ]
# 传统
layout = [

    [sg.Text("请输入基本信息")],
    [sg.Text("姓名"), sg.In()],  # 传统一
    [sg.Text("性别")] + [sg.In()],  # 传统二
    [sg.Text("国籍")] + [sg.In()],
    [sg.B('确认'), sg.B('取消')]

]

w = sg.Window('Py pySimpleGUI', layout)
while True:
    event, values = w.read()
    if event == None:
        break

w.close()

(7) 文本元素的设定方法

import PySimpleGUI as sg

text = """
江南春
唐 杜牧
千里莺啼绿映红,
水村山郭酒旗风。
南朝四百八十寺,
多少楼台烟雨中。
"""
layout = [
    [sg.Text(text,
             key='-Text-',  # 元素唯一标识符,书写规范key='-NMAE-'。用于元素的定位。
             size=(30, 20),  # 元素宽度,行高(int,int)
             font=None,  # 设定字体名称,大小,font='宋体',font=('宋体', int) or font=['宋体',int]
             auto_size_text=None,  # 当设定值为True时,窗口自动适应文本大小
             enable_events=None,  # 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  (左右,上下) or ( (左,右),  (上,下) ) or 根据左边规则进行自由搭配
             right_click_menu=['1', ['1', '2', '3']],
             # 右击调出菜单,List[    List[  Union[List[str],str]  ]    ] 设定后,右击此元素可以调出菜单
             grab=None,  # 如果为真,点此元素可以移动拖拽窗口
             tooltip=None,  # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
             visible=True  # bool: 元素可见状态
             )]

]

window = sg.Window("Test_GUI", layout)

while True:
    event, values = window.read()
    if event == None:
        break
    if event == '-Text-':  # 这一段代码需要开启上面的enable_events
        sg.popup('运行了一个点击事件')

window.close()

(8) 文本元素的更新方法

import PySimpleGUI as sg

layout = [
    [sg.T('Hello World!', key='-Text-')],
    [sg.T('Think you!', key='-Fun-')],
    [sg.B('确定')]
]

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

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

    if event == '确定':  # 当用户点击’确定‘按钮时,执行跟新文本
        window['-Text-'].update(
            value='谢谢',  # str  更新文本
            background_color='black',  # 更新文本的背景颜色
            text_color='red',  # 更新文本颜色
            font=('黑体', 30),  # 更新字体的名称或者大小
            visible=None  # 更新元素的可见状态
        )

window.close()

(9) 单行输入框元素的设定方法

import PySimpleGUI as sg

layout = [
    [sg.T('账号:'), sg.In()],
    [sg.T('密码:'), sg.In(
        '请输入您的密码',  # 默认值设定,可以为空字符串
        key='-INPUT-',  # 元素的唯一标识符  规范 key='-INPUT-'
        size=(None, None),  # 宽,行高
        disabled=None,  # bool: 元素禁用, 如果为True则禁用,用户无法输入任何值
        password_char='',  # 密码字符,一般设置为*
        justification='l',  # 对齐方式‘r’,‘l’,‘c’
        background_color=None,  # 输入框颜色
        text_color=None,  # 输入框的文本颜色
        font=('宋体', 10),  # 输入框字体的名称或者大小设定
        tooltip='这是一个提示',  # str: 悬浮文本
        border_width=5,  # 输入框边界线宽度设定
        enable_events=False,  # bool:输入框的事件属性
        # 如果设定为True,输入值的时候会发生一个事件
        do_not_clear=True,  # bool: 输入框内容不被清空
        # 如果为False, 该输入框内的值会被清除
        focus=False,  # bool: 设定焦点,如果为True,则光标显示在此输入框。
        pad=None,  # 元素间隔
        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, 则界面不显示该元素

    )]
]

window = sg.Window('Python pySimpleGUI', layout)

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

window.close()

(10) 单行输入框的更新方法

import PySimpleGUI as sg

layout = [
    [[sg.InputText(i, key=i)] for i in 'abcd'],

    [sg.Button('确定'), sg.Button('取消')]
]

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

while True:
    event, values = window.read()
    print(event)
    if not event:
        break
    if event == '确定':
        window['userDate.txt'].SetFocus()  # 用于更新元素的焦点
        window['userDate.txt'].SetTooltip('请输入XXX')  # 用于更新悬浮文本
        window['d'].update(
            value='',  # str : 更新输入框的文本
            disabled=None,  # bool : 更新元素的禁用状态
            # 如果为True, 输入框变成只读状态,无法写入
            select=None,  # bool : 元素适中
            # 如果为True, 输入框内的文本被全选中
            # 和 focus 或者 set_focus 一起试着使用吧
            visible=None,  # bool : 更新元素的可见状态
            text_color=None,  # str : 更新输入框内的文本颜色
            background_color='red',  # str : 更新输入框的背景颜色
            move_cursor_to='end'  # 光标移动文本的最后
            # 和 value, focus 一起试着使用吧
        )

window.close()

(11) 按键元素的设定及更新方法

import PySimpleGUI as sg

# 按键元素的设定
layout = [

    [sg.T('账号', size=(5, 1)), sg.In()],
    [sg.T('密码', size=(5, 1)), sg.In()],
    [sg.B('确认'), sg.B(
        button_text="取消",  # 显示在按钮上的文本
        key='-CENCEL-',  # 元素的唯一标识符
        button_color=(None, None),  # 按钮的 文本颜色 和 背景颜色
        tooltip=None,  # 悬浮文本
        disabled=False,  # 元素禁用设定,如果为True,点击按钮也无法发生事件
        image_filename=None,  # 图片路径,按钮用图片表示
        # 只支持GIFs 和 PNGs 格式
        # 和 image_data 二选一使用
        image_data=None,  # 图片 base64 格式,按钮用图片显示
        # 和image_filename 二选一使用

        # 如何获取 图片的 base64 格式?以下代码可以实现:
        # import base64
        # f = open('图片路径')
        # res = f.read()
        # s = base64.b64encode(res)
        # print(s)
        # f.close()

        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,  # 按钮上的文本自动调节
        disabled_button_color=None,  # 按钮元素禁用时显示的按钮颜色
        font=None,  # 字体名称,大小设定
        bind_return_key=False,  # 绑定回车键
        # 如果设定为True, 回车键会使此元素被点击。
        focus=False,  # 焦点设置
        pad=None,  # 和其他元素之间间隔设定
        visible=True,  # 元素的可见状态设定
        # 如果为True,元素则不可见

    )]

]

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

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

# 按键元素的更新方法
window['-CENCEL-'].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  # 图片尺寸设定
)

window.close()

(12) 列表元素的设定方法

import PySimpleGUI as sg

elist = ['python', 'java', 'c++', 'php', 'html']

""" sg.Listbox(elist, size=(None, None)  可以缩写成  sg.LB(elist, size=(None, None))"""

layout = [
    [sg.Listbox(elist,
                default_values="java",  # 默认选中的值或者列表【比如现在进入默认选择java这一行】
                key='-LB-',  # 元素的唯一标识符
                select_mode=None,  # 选择模式,有效值包含如下4种
                # single , 单选,更换时点击选择
                # multiple , 可以多选,逐一点击选择
                # browse , 单选,鼠标按住也可以更换选择
                # extended , 可以多选,鼠标按住也可以扩展选择

                enable_events=True,  # 元素的事件属性
                # 如果设定为True, 元素列表项目被选中时会发生事件
                bind_return_key=False,  # 绑定回车键
                # 如果设定为True, 回车键被按下时相当于此元素被点击
                size=(30, 6),  # 字符宽度,行高
                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  # 元素可见状态设定

                )]
]

window = sg.Window("pySimpleGUI", layout)

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

    if not event:
        break

window.close()

(13) 列表元素的更新方法

"""
方法:window[key].update()

可以更新的属性和参数1
values=None,  就是默认显示的列表或元组内容
# 可以用 values=... 更新元组或者列表,列举如下
# e_tuple = (1, 3)
# e_list = [1, 3]
# values = e_tuple
# values = e_list

disabled=None,
# bool: 更新元素是否禁用,举例如下
# disabled=True
# disabled=Fales

set_to_index=None,
# 高亮显示设置的索引,Union[int, list, tuple], 列举如下

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

visible=None
# bool:更新元素的可见状态
# visible=True
# visible=False
"""

import PySimpleGUI as sg

list1 = ['Python', 'html', 'php', 'avp', 'mml', 'fjl', 'tho', 'Java', 'c++']
list2 = ['小明同学', '小叶同学', '小花同学', '小美同学', '小壮同学']
layout = [
    [sg.T('信息界面', size=(8, 1))],
    [sg.LB(list1, key='-list-', size=(30, 2))],
    [sg.B('编程语言'), sg.B('程序员')],
    [sg.B("高亮显示"), sg.B("跳转到Java")]
]

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

while True:
    event, values = window.read()
    print(event)
    key = '-list-'
    if not event:
        break

    if event == '程序员':
        window[key].update(values=list2)

    if event == '编程语言':
        window[key].update(values=list1)

    if event == "高亮显示":
        window[key].update(set_to_index=0)
        # 获取被高亮显示的对象
        print(window[key].get())

    if event == "跳转到Java":
        window[key].update(scroll_to_index=8)
        print(window[key])

window.close()

(14) 下拉菜单的设定方法

"""
下拉菜单的书写方法

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


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

"""

import PySimpleGUI as sg

list1 = ['Python', 'Java', 'C', 'c++', 'Gui']
list2 = ['小明', '小王', '小花', '小壮', '小美']

layout = [
    [sg.Drop(list1,
             default_value='Java',  # 默认选中的值或者列表【比如现在进入默认选择Java这一行】
             key=None,  # 元素的唯一标识符
             size=(30, 6),  # 字符宽度,行高
             auto_size_text=None,  # 如果为True, 元素自动根据内容大小调整
             background_color=None,  # 背景颜色设定
             text_color=None,  # 字体颜色设定
             enable_events=True,  # 元素的事件属性,如果设定为True, 元素列表项目被选中时会发生事件
             disabled=False,  # 元素是否禁用
             pad=None,  # 元素间隔设定
             tooltip=None,  # str : 悬浮文本设定
             readonly=False,  # 元素只读属性,只能选择,不能输入内容
             font=None,  # 元素字体名称或者大小设定
             bind_return_key=False,  # 绑定回车键
             # 如果设定为True, 回车键被按下时相当于此元素被点击
             visible=True,  # 元素可见设定状态

             )]
]

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

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

    if not event:
        break

window.close()

(15) 下拉菜单的更新方法

import PySimpleGUI as sg

list1 = ['Python', 'Java', 'C', 'c++', 'Gui']
list2 = ['小明', '小王', '小花', '小壮', '小美']

layout = [
    [sg.Drop(list1,
             default_value='Python',
             key='-list1-',
             size=(30, 6),
             enable_events=True
             )]
]

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

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

    if not event:
        break

    if event == '-list1-':
        list3 = [1, 2, 3, 4, 5]
        window['-list1-'].update(
            value=None,  # 更新默认选项中的选项
            values=list3,  # 更新显示的所有下拉菜单文本
            set_to_index=None,  # 高亮显示设定的索引的文本
            disabled=None,  # 更新元素的禁用状态
            readonly=None,  # 更新元素是否只读
            font=None,  # 更新元素的字体名称或者大小
            visible=None  # 定义元素为不可见
        )

window.close()

(16) 选择菜单和选择按钮

""" 选择菜单 """
# 书写方法:sg.OptionMenu()
# 此元素和设置了只读属性的ComboBox很像。
# 它没有’font‘属性,不可以设定字体样式和大小
# 没有’enable_events‘事件属性,不可以触发事件

""" 选择菜单可设定的属性 """
# default_value=None, 默认文本
# key=None, 唯一标识符
# size=(None, None), 元素的宽度和行高
# disabled=False, 更新元素的禁用状态
# auto_size_text=None, 元素根据文本自动调节
# background_color=None, 背景颜色设定
# text_color=None, 文本颜色设定
# pad=None, 元素间隔设定
# tooltip=None, str : 悬浮文本设定
# visible=True, 元素可见状态设定

""" 选择菜单可更新的属性 """
# value=None, 更新默认选中的元素
# values=None, 更新所有显示的文本选项
# disabled=None, 更新元素的禁用状态
# visible=None, 更新元素的可见状态

""" 旋转按钮 """
# 书写方法:sg.Spin()
# 特征:含有向上向下两个箭头按钮

""" 旋转按钮可设定的属性 """
# 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, 元素可见状态设定

""" 旋转按钮可更新的属性 """
# value=None, 更新默认选中的元素
# values=None, 更新所有显示的文本选项
# disabled=None, 更新元素的禁用状态
# visible=None, 更新元素的可见状态


import PySimpleGUI as sg

a = ['python', 'java', 'c++', 'php', 'html']
layout = [
    [sg.T('选择菜单'), sg.OptionMenu(a, key='-OM-'), # 注意:选择菜单没有’触发事件属性‘,不能写 enable_events=...
     sg.T('Sgin'), sg.Spin(list(range(10)), key='-SP-', enable_events=True)],
    [sg.T("语言"), sg.In(key='-YY-', size=(25))]

]

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

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

    if not event:
        break

    if event == '-SP-':
        window['-YY-'].update(values['-SP-'])
window.close()

(17) 单选框的多种布局方式

""" 单选框的书写方法 """

# sg.Radio() or sg.R


""" For循环快速定义单选框 """

# 1) 从左向右
# layout = [[], [], [() for]]
# layout = [[]] + [[]] + [[() for]]


# 2) 从上到下
# layout = [[]] + [[]] + [[] for]


# 3) 同时进行‘从左向右’和‘从上到下’
# layout = [[sg.R(i, group_id=j) for i in list1] for j in range(9)]


import PySimpleGUI as sg

list1 = ['非常满意', '满意', '一般', '不满意']
list2 = ['请对我做出评价:', '请对您做出评价:']

''' 从左到右 '''
# 1.传统的布局方式:
# layout = [
#     [sg.T('1.' + list2[0])],
#     [sg.R(i, group_id=1) for i in list1],  # group_id=1 意思是:分为第1组
#     [sg.T('2.' + list2[1])],
#     [sg.R(i, group_id=2) for i in list1]  # group_id=1 意思是:分为第2组
#
# ]

# 2.拼接方式:
# layout = [[sg.T('1.' + list2[0])]] + \
#          [[sg.R(i, group_id=1) for i in list1]] + \
#          [[sg.T('2.' + list2[1])]] + \
#          [[sg.R(i, group_id=2) for i in list1]]

''' 从上到下 '''
# layout = [
#     [[sg.R(i, group_id=1)] for i in list1]
# ]

layout = [[sg.R(i, group_id=j) for i in list1] for j in range(9)]

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

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

    if not event:
        break

window.close()

(18) 单选框属性的设定及更新方法

" 单选框属性的设定及更新方法 "
# 设定方法:
# sg.R(list, size=(None, None))
#
# 更新方法
# window[key].update()
#
# 相同组ID的单选框都更新为未选中状态:
# window[key].ResetGroup()
# window[key].reset_group()


import PySimpleGUI as sg

list1 = ['非常满意', '满意', '一般', '不满意']

layout = [
    [sg.T('1.XXX')],
    [sg.R(i, group_id=1, key=i) for i in list1],
    [sg.B('确认提交')]

]
"""
  单选框可设定的一些属性:

text,  # str 文本用于显示在单选框旁边 
group_id,  # any  # 组ID
key=None,  # 元素的唯一标识符
default=False,  # bool如果为True,则默认选中
disabled=False,  # 元素是否禁用
size=(30, 6),  # 字符宽度,行高
auto_size_text=None,  # 如果为True, 元素自动根据内容大小调整
background_color=None,  # 背景颜色设定
text_color=None,  # 字体颜色设定
font=None,  # 元素字体名称或者大小设定
pad=None,  # 元素间隔设定
tooltip=None,  # str : 悬浮文本设定
enable_events=True,  # 元素的事件属性,如果设定为True, 元素列表项目被选中时会发生事件
visible=True,  # 元素可见设定状态

"""

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

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

    if not event:
        break

    if event == '确认提交':
        # window['满意'].reset_group()  # '相同组ID'!!的单选框都更新为未选中状态
        # window['满意'].update(value=True)

        # 通过判断窗口返回值中的values字典里面用户的选择信息,来获取对应的内容
        for k, v in values.items():  # items()函数:将字典里面的(键,值)转换为元组
            if v:
                print(k)
                break

"""

  单选框可更新的一些属性:
  
value=None,  # 为True时,此单选框被选中,同组的其他选框更新为未选中
# bool 如果为True, 则选中,如果为False,则清空选中状态
text=None,  # srt 更新显示在按钮旁边的文本
background_color=None,  # 更新背景颜色
text_color=None,  # 更新文本颜色
disabled=None,  # 更新元素的禁用状态
visible=None  # 定义元素为不可见

"""
window.close()

(19) 复选框的设定及更新方法

"""多选框可设定的一些属性:"""

# text,  # str 文本用于显示在单选框旁边
# default=False,  # bool如果为True,则默认选中
# size=(30, 6),  # 字符宽度,行高
# auto_size_text=None,  # 如果为True, 元素自动根据内容大小调整
# font=None,  # 元素字体名称或者大小设定
# background_color=None,  # 背景颜色设定
# text_color=None,  # 字体颜色设定
# enable_events=True,
# # 元素的事件属性,如果设定为True, 元素列表项目被选中时会发生事件
# disabled=False,  # 元素是否禁用
# key=None,  # 元素的唯一标识符
# pad=None,  # 元素间隔设定
# tooltip=None,  # str : 悬浮文本设定
# visible=True,  # 元素可见设定状态


"""多选框可更新的一些属性:"""

# value = None,  # 为True时,此单选框被选中,同组的其他选框更新为未选中
# # bool 如果为True, 则选中,如果为False,则清空选中状态
# text = None,  # srt 更新显示在按钮旁边的文本
# background_color = None,  # 更新背景颜色
# text_color = None,  # 更新文本颜色
# disabled = None,  # 更新元素的禁用状态
# visible = None  # 定义元素为不可见

(20) 滑块元素的书写及设定方法

import PySimpleGUI as sg

layout = [
    [sg.Slider(
        range=(100, 500),  # 滑块范围(最大值,最小值)
        key=None,
        default_value=None,  # 滑块初始所处位置
        resolution=None,  # 滑块变动的最小单位值
        tick_interval=50,  # 显示刻度值
        orientation=None,  # 方向设定 水平方向或者垂直方向
        # 有效值 'horizontal' or 'vertical'
        # 支持简写:'h' or 'v'

        disable_number_display=False,
        # 默认为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='grey',  # 滑块背景颜色设定
        text_color='pink',  # 元素文本颜色设定
        pad=None,  # 元素间隔设定((int, int),(int , int))
        tooltip=None,  # 元素悬浮文本设定
        visible=True,  # 元素可见状态设定

    )]
]

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

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

    if not event:
        break

window.close()

(21) 滑块元素的更新方法

# win[key].update()
# value = None,  # int or float  更新滑块初始所处位置
# range = (None, None),  # (int, int) or (float, float)  滑块范围
# disabled = None,  # bool   元素的禁用状态
# visible = None,  # bool   元素是否显示

(22) 图片元素的多种书写方式

""" 图片元素的书写方法 """
# 书写方法:sg.Image(filename='图片路径')
# 图片路径仅支持GIF和PNG

import PySimpleGUI as sg

img = r'C:\Users\叶寻\Desktop\Python\picture'

layout = [
    [sg.Image(filename=img + fr'\p{n}.png') for n in range(1, 4)]

]

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

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

    if not event:
        break

window.close()

(23) 图片元素的设定及更新方法

import PySimpleGUI as sg

# 方法一:导入图片位置
# img = r'C:\Users\叶寻\Desktop\Python\picture'


# 方法二:将’图片信息‘保存到当前编辑器(粗暴方法,哈哈)
pic1 = 'ADAFBMVEVHcExSQjQtP01pdXcxSlw...'
pic2 = 'QjQtaP01pdXcxSQjQtPgc01pdXcxS...'
pic3 = 'HJvZmlsZQAASA2lsZQAASA2dlnkWh...'

# 动图的演示:
pic_gif = sg.DEFAULT_BASE64_LOADING_GIF

# 方法一的操作:
# layout = [
#     [sg.Image(
#         filename=img + fr'\p{n}.png',
#
#         data=None,  # base64编码的字符串
#         background_color=None,  # 背景颜色设定
#         size=(100, 100),  # 图片 宽度和高度设定(pix)
#         pad=None,  # 和周围元素间的间隔((左,右),(上,下))
#         key='-PK-',  # 元素的唯一标识符
#         tooltip=None,  # 元素的悬浮文本
#         right_click_menu=None,  # 右击调出菜单
#         visible=True,  # 元素可见状态 bool
#         enable_events=False,  # 元素事件属性,默认False
#
#     ) for n in range(1, 4)]
#
# ]


# 方法二的操作:
# layout = [
#     [sg.Image(data=pic1), sg.Image(data=pic2), sg.Image(data=pic3)]
# ]


# 动图的演示:
layout = [
    [sg.Image(data=pic_gif, key='-GIF-')]  # 只做这一步,图是不会动的!还要做下面的两步:(1)和(2)
]

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

while True:
    event, values = window.read(timeout=10)  # (1)做一个超时毫秒的设定:即在window.read()里面写:timeout=10  (即10毫秒)
    window['-GIF-'].update_animation(source=pic_gif, time_between_frames=200)
    # print(event, values)

    if not event:
        break

    if event == '-PK-':
        window['-Pk-'].update(
            filename=None,  # 更新图片路径
            data=None,  # 更新元素base64编码字符串
            size=(None, None),  # 更新图片的宽度和高度设定(pix)
            visible=None,  # 更新元素的可见状态
        )

window.close()

"""  补充: 图片元素的动图更新方法  """
# window[key].update_animation()
# window[key].UpdateAnimation()
# 动图可更新的属性
# source  # 包含动画GIF的文件名或Base64编码的字符串
# time_between_frames=0  # 显示帧之间要等待的毫秒数

(24) 列元素的书写及设定方法

# 列元素的书写方法
# sg.Column() or sg.Col()
# 一个容器元素,用于在窗口的布局中创建布局

import PySimpleGUI as sg

layoutL = [
    [sg.Text("标题")],
    [sg.InputText('请输入文章标题')],
    [sg.Text("作者")],
    [sg.InputText('请输入姓名或笔名')]

]

layoutR = [
    [sg.Multiline("请输入正文内容", size=(30, 20))],  # Multiline 可以缩写成 ML
    [sg.Button('确认提交')],

]

layout = [
    [sg.Col(layoutL),
     sg.Col(layoutR,
            background_color='yellow',  # 整个列元素的背景颜色
            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方向扩展以填充可用空间

            )]
]

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

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

    if not event:
        break

window.close()

(25) 框架元素的书写及设定方法

import PySimpleGUI as sg

aaa = [
    [sg.Text("账号"), sg.InputText()],
    [sg.Text("密码"), sg.InputText()]

]

layout = [
    [sg.Frame(
        title='登录框哦哦哦~~',
        layout=aaa,
        key=None,  # 框架元素的唯一标识符

        tooltip=None,  # 悬浮文本

        right_click_menu=None,  # 右击调出菜单

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

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

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

        title_location=None,
        # 标题所处位置
        # 有效值有12种(ewsn,东西南北)
        # n北,nw北西, ne, e, en, es, s, se, sw, w, ws, wn
        # (注意:北西 不等于 西北)
        # 默认为 nw北西

        relief='flat',
        # 浮雕设计  和其他元素的有效值是一样的
        # raised, sunken, flat, groove, ridge, solid

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

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

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

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

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

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

    )]
]

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

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

    if not event:
        break

window.close()

(26) 通过框架元素的更新实现界面切换

# 框架元素的更新
# window[key].Update(visible=None)
# 可更新的属性
# value=None, 框架元素的标题
# visible=None, 元素的可见状态

import PySimpleGUI as sg

elist = ['资料1', '资料2', '资料3', '资料4', ]

layout_e = [
    [sg.Listbox(elist, size=(20, 5))]
]

aaa = [
    [sg.Text("账号"), sg.InputText()],
    [sg.Text("密码"), sg.InputText()],
    [sg.Button("确认"), sg.Button("退出")]

]

layout = [
    [sg.Frame(title='登录框~~', layout=aaa, key='-DL-'),
     sg.Frame(title='列表质料', layout=layout_e, key='-LB-', visible=False)]

]

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

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

    if not event:
        break

    if event == '确认':
        window['-LB-'].update(visible=True)
        window['-DL-'].update(visible=False)

    if event == '退出':
        sg.popup('确定退出?')
        break

window.close()

(27) 标签元素的讲解及练习

# 标签元素,也是一种容器元素,里面可以放置各种元素及布局
# 优点在于切界更为简便
# 书写方式与别的元素稍有不同,具体如下
import PySimpleGUI as sg

lista = ['苹果', '香蕉', '雪梨', '西瓜']
listb = ['白菜', '芥菜', '包菜', '生菜']

layout_a = [[sg.Listbox(lista, size=(50, 5))]]
layout_b = [[sg.Listbox(listb, size=(50, 5))]]

layout = [
    [sg.TabGroup(
        [
            [sg.Tab("水果类", layout_a,
                    # <单个标签元素的可设定的属性>

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

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

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

                    disabled=False,  # 禁用状态设定

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

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

                    tooltip=None,  # 悬浮文本设定

                    right_click_menu=None,  # 右击调出菜单

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

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

                    ), sg.Tab("蔬菜类", layout_b)]],

        # <整个标签元素的可设定的属性>

        # 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,  # 标签标题所在空白区域的背景颜色

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

        # enable_events=False,  # 元素的事件属性, 切换标签元素就会发生事件

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

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

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

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

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

    )
    ]

]

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

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

    if not event:
        break

    if event == '水果类':
        window['-F-'].update(
            # 可更新的属性:

            title=None,  # 标签标题文本的更新

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

            visible=None,  # 可见状态的更新
        )

window.close()

(28) 编写一个文件选择器

import PySimpleGUI as sg

# 选择单个文件:用 FileBrowse
# 选择多个文件:用 FilesBrowse
layout = [
    [sg.FileBrowse(target='-B-', file_types=(("ALL Files", '*.*'),))],
    [sg.InputText(key='-A-'), sg.InputText(key='-B-')]
]

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

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

    if not event:
        break

window.close()

"""
button_text = "选择",  # 按钮元素上要显示的文本

target = None,  # 将要显示路径,显示到指定的key的输入框中---InputText

file_types = (("ALL Files", '*.*'),),
# 只显示指定的文件类型 '*.png'
# 只显示指定的文件名称 'text.*'
# 例:
# '*.*'  -->  显示全部类型文件
# '*.png'  -->  只显示png类型的文件
# 'pic.*'  -->  只显示名字为pic的文件

initial_folder = None,  # 默认路径设定


# _______________________________________________
# 通用
tooltip = None,  # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
size = (None, None),  # 元素宽度,行高(int,int)
auto_size_text = None,  # 当设定值为True时,窗口自动适应文本大小
button_color = None,  # 按键的颜色
enable_events = None,  # bool: 事件触发属性
font = None,  # 设定字体名称,大小,font='宋体',font=('宋体', int) or font=['宋体',int]
disabled = False,  # 元素禁用设定
pad = None,  # 元素间隔设定   记住参数类型为int  (左右,上下) or ( (左,右),  (上,下) ) or 根据左边规则进行自由搭配
key = '-Text-',  # 元素唯一标识符,书写规范key='-NMAE-'。用于元素的定位
visible = True  # bool: 元素可见状态


"""

(29) 文件夹选择器与文件另存为

# 文件夹选择器的书写方法:
# sg.FolderBrowse()
# 文件另存为的书写方法:
# sg.FileSaveAs()

"""
button_text = "选择",  # 按钮元素上要显示的文本

target = key,  # 将要显示路径,显示到指定的key的输入框中---InputText

file_types = (("ALL Files", '*.*'),),
# 只显示指定的文件类型 '*.png'
# 只显示指定的文件名称 'text.*'

initial_folder = None,  # 默认路径设定
"""

import PySimpleGUI as sg

layout = [
    [sg.FileBrowse(button_text="选择文件", size=(8, 1)), sg.InputText(size=(20, 1))],
    [sg.FolderBrowse(button_text="选择文件夹", size=(8, 1)), sg.InputText(size=(20, 1))],
    [sg.FileSaveAs(button_text="另存为", size=(8, 1)), sg.InputText(size=(20, 1))]
]

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

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

    if not event:
        break

window.close()

(30) 颜色选择器和日历选择器

import PySimpleGUI as sg

# 1月~12月 的列表
chinese_month_list = []
for i in range(1, 13):
    chinese_month_list.append(f'{i}月')

# 周:
chinese_week_list = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]

layout = [
    [sg.ColorChooserButton(button_text='颜色选择器'), sg.InputText()],
    [sg.CalendarButton(button_text='日历选择器', day_abbreviations=chinese_week_list), sg.InputText()]
]

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

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

    if not event:
        break

window.close()

# 属性设定:
# 通用属性省略

# 颜色选择器的属性
# button_text = '颜色选择器',  # 按钮元素要显示的文本
# target = key,  # 显示颜色码的目标元素的key

# 日历选择器
# button_text = '日历选择器',  # 按钮元素上显示的文本
# target = key,  # 选择的日期要显示的位置
close_when_date_chosen = True,  # 选择日期后 日历界面关闭
default_date_m_d_y = (None, None, None),  # 打开界面,默认显示的日期设定
locale = None,  # 区域设定,西班牙:es
format = "%Y-%m-%d %H:%M:%S",  # 显示的格式
begin_at_sunday_plus = 0,  # 指定日历显示的第一列  (例:索引0:周日 索引1:周一 ...)
month_names = None,  # 指定月份的文本列表, 比如日历默认是英文,自己写个中文的赋值给它即可实现‘中文日历’
# 可以试试将 chinese_month_list 带入
day_abbreviations = None,  # 指定周几的文本列表
# 可以试试将 chinese_week_list 带入
title = "日历",  # 选择窗口的标题
no_titlebar = False,  # 不显示标题
location = (None, None),  # 日历窗口在电脑屏幕上的位置,x轴y轴

(31) 关于弹窗的各种设定

import PySimpleGUI as sg

# popup是有返回值的
return_sth = sg.popup('能力越大', '责任越大', '哈' * 20,

                      no_titlebar=False,  # 不显示标题栏(非常好的一个属性)

                      grab_anywhere=True,  # 如果为True,拖拽界面进行移动

                      keep_on_top=False,  # 如果为True,保持界面在屏幕的最前方

                      title='弹窗显示',  # 弹窗标题,如果未设定,默认显示可变参数的第一个文本作为标题

                      button_color=('red', 'black'),  # (文本颜色, 背景颜色)

                      background_color='black',  # 弹窗的背景颜色

                      text_color='red',  # 弹窗上面的文本颜色

                      auto_close=False,  # 如果为True,弹窗会自动关闭界面,一般配合下面的使用

                      auto_close_duration=None,  # 自动关闭窗口之前界面持续的时间(以秒为单位),一般配合上面的使用

                      custom_text=('yes', 'no'),  # 自定义按钮上要显示的文本,可以设定一个或者两个

                      non_blocking=False,  # 非阻塞设定,如果为True,立即执行下一步,不需要等待用户输入

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

                      location=(None, None),  # 界面出现的位置

                      any_key_closes=False,
                      # 如果为True, 敲打任意键会关闭窗口
                      # 如果为False, 只用X按钮关闭窗口,以及回车键才会关闭窗口

                      image=None,  # 显示图片(支持base64)

                      modal=True,  # 模拟窗口设定,除非关闭此窗口,否则其他界面不能操作

                      )

# 打印popup返回值
print(return_sth)

(32) 弹窗之PopupGetText

import PySimpleGUI as sg

print(sg.PopupGetText('密码输入框', password_char='*'))

(33) 各种不同特征的弹窗

import PySimpleGUI as sg

# 文件选择弹窗
sg.PopupGetFile('请选择一个文件') or sg.popup_get_file('请...')

# 文件夹选择弹窗
sg.PopupGetFolder('请...') or sg.popup_get_folder('请...')

# 没有标题栏的弹窗,可以随意移动窗口
sg.PopupAnnoying()

# 显示一段时间后自动关闭窗口
sg.PopupAutoClose()

# 含有一个Cancelled的按钮
sg.PopupCancel()

# 弹窗含有OK和Canceld两个按钮
sg.PopupOKCancel()

# 含有一个带有颜色的Error按钮
sg.PopupError()

# 显示无按钮的弹窗
sg.PopupNoButtons()

# 显示弹窗窗口并立即返回
sg.PopupNoWait()

(34) 菜单栏的设定方法

import PySimpleGUI as sg

menu = [
    ['文件(&F)', ['新建', '打开', ['打开1', '打开2'], '保存', '退出']],  # '---'分割   ‘!哈哈’禁用‘哈哈’这个功能
    ['编辑', ['撤销', '重做', '剪切', '保存', '!感叹号禁用功能']],
    ['帮助', ['---', '检测更新', '---', '使用指南::YeXun', '---', '!关于']]  # 非整体中的key,而是部分中的key,其中,key='使用指南::YeXun'
]

layout = [
    [sg.Menu(menu, key='-A-', tearoff=False)],  # 整体的key  # tearoff=False 中False改为True,将启动菜单栏独立功能
    [[sg.InputText(size=(30, 1))] for _ in range(5)]
]

window = sg.Window('菜单演示', layout)

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

    if not event:
        break

    if event == '使用指南::YeXun':
        sg.popup('暂无指南')

window.close()

(35) window窗口常用属性

import PySimpleGUI as sg

layout = [
    [[sg.InputText()] for _ in range(6)],
    [sg.Button('确定'), sg.Button('取消')]
]

window = sg.Window('pySimpleGUI', layout,
                   location=(None, None),  # 默认窗口出现位置

                   size=(500, 500),  # 窗口的宽度和高度

                   element_padding=(30, 20),  # 元素间间隔设定

                   button_color=('black', 'red'),  # 按钮元素颜色设定(文本颜色,背景颜色)

                   font=('黑体', '15'),  # 字体名称和大小

                   background_color='pink',  # 背景颜色设定

                   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=True,  # 如果为True,窗口最小化将不起作用

                   right_click_menu=None,  # 右击调出菜单

                   transparent_color=None,  # 界面透明设定 =sg.theme_background_color()

                   element_justification='center'  # 元素对齐方式设定,有效值 left, right, center

                   )

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

    if not event:
        break

window.close()

(36) 多行文本框元素

import PySimpleGUI as sg

text1 = """永远爱你
鹅鹅鹅呃呃呃,哈哈哈哈哈。
飞蛾发发阿发,阿发发发发。
啊发发发发啊,啊发发发发。
发发发发发发,法网发任发。
"""

layout = [
    [sg.ML(default_text=text1,  # Multiline 缩写ML

           disabled=False,  # 默认显示的文本

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

           size=(50, 6),  # 宽度and行高

           background_color=None,  # 背景颜色

           text_color=None,  # 文本颜色

           enable_events=False,  # 元素事件属性

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

           write_only=False,  # 为True时,文本框只提供用户写入,窗口不读取,无返回值

           reroute_stdout=False,  # print 语句内容会显示在此文本框内

           reroute_cprint=True,  # 使用 cprint 将内容打印到此文本框内。
           # 详细参考sg.cprint()

           reroute_stderr=False,  # 捕捉异常时将文本写在此元素内,sys.stderr.write('?')

           autoscroll=False,  # 为True, 更多数据添加到末尾时,元素的内容将自动滚动

           focus=False,  # 字体名称和大小

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

           tooltip=None,  # 悬浮文本

           justification=None,  # 对齐方式设定

           right_click_menu=None,  # 右击调出菜单设定

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

           do_not_clear=True,  # 默认为True, 如果设定为False, 窗口读取一次,内容就会自动清楚

           )],
    [sg.OK(), sg.Cancel()]

]

window = sg.Window('多行文本演示', layout)

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

    if not event:
        break

    if event == '-A-':
        window['-TEXT-'].update(
            value='你好!',  # 更新内容

            disabled=None,  # 元素禁用

            append=True,  # 如果为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,  # 更新文本的对齐方式,left, right, center

        )

    if event == 'OK':
        print('ok')

    if event == 'Cancel':
        # cprint的相关属性:

        # args = * < 1 or object >

        # 可变参数
        # end = None,  # 结束符,默认为回车键
        # sep = " ",  # 分隔符,默认为空格键

        # text_color = None,  # 文本颜色,可简写成t

        # background_color = None,  # 背景颜色,可简写成b

        # colors(None)  # 可以简写成c

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

        # justification=None,
        # 文本的对齐方式,left,right,center, 可简写l,r,c

        sg.cprint('cancel', '您按了取消!', '随便添加内容')

window.close()

(37) 多行文本框知识点补充

import PySimpleGUI as sg

text1 = """永远爱你
鹅鹅鹅呃呃呃,哈哈哈哈哈。
飞蛾发发阿发,阿发发发发。
啊发发发发啊,啊发发发发。
发发发发发发,法网发任发。
"""

layout = [
    [sg.ML(default_text=text1, size=(50, 6), key='-TEXT-')],
    [sg.OK(),
     sg.VerticalSeparator(color='red', key=None, pad=((10, 10), (10, 10))),  # 垂直分割线
     sg.Cancel()]

]

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

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

    if not event:
        break

    if event == 'OK':
        window['-TEXT-'].print(
            # '你好',  # 打印文本
            # end='',  # 要打印的元素的结束符,默认为换行 end='\n'
            # sep=None,  # 要打印的元素的分隔符 默认为空格 sep=' '
            # text_color=None,  # 要打印的文本的颜色
            # background_color=None,  # 要打印的元素这一行的背景颜色
            # justification=None,  # 要打印的元素对齐方式
        )

    if event == 'Cancel':
        sg.cprint('Cancel', '你按了取消')

window.close()

(38) 表格元素的设定方法

import PySimpleGUI as sg

a = ['编号', '商品', '价格', '', '', '']
b = [['001', '牛奶', '5'], ['002', '牛奶', '6'], ['003', '香烟', '10'], ]

layout = [
    [sg.Table(b,  # 表格内容
              headings=a,  # 表格头部

              max_col_width=500,  # 所有列的最大宽度(要和控制‘列宽’的属性进行配合使用)

              auto_size_columns=None,  # 是否自动适应列宽度

              def_col_width=10,  # 定义列表宽度

              display_row_numbers=False,  # 是否显示序号列

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

              num_rows=10,  # 定义行数

              row_height=20,  # 定义行高

              key='-userDate.txt-',

              font=('黑体', 10),  # 字体名称和大小

              text_color=None,  # 字体颜色

              background_color='red',  # 背景颜色

              enable_events=True,  # 事件触发

              bind_return_key=True,  # 绑定键盘

              )]
]

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

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

    if not event:
        break

window.close()

你可能感兴趣的:(Python进阶,python)