003.PySimpleGUI

1.基本模板

# 1.导入库
import PySimpleGUI as sg

# 2.定义布局、确定行数
layout = [
    [],
    [],
    [],
    [],
    []
]

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

# 4.事件循环
while True:
    event,values = window.read()
    if event == None:
        break

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

2.简单的例子001

 

 

# 1.导入库
import PySimpleGUI as sg

# 2.定义布局、确定行数
layout = [
    [sg.Text("请输入您的信息")],
    [sg.Text("姓名", enable_events=True), sg.InputText('张三', key='-name-')],  # 文本输入框
    [sg.Text("性别"), sg.InputText('男', key='-sex-')],
    [sg.Text("民族"), sg.InputText('汉', key='-nationality-')],
    [sg.Button('确定'), sg.Button('取消')]  # 按钮
]

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

# 4.事件循环
while True:
    event, values = window.read()
    # 4.1 按键点击事件
    if event == '确定':
        print('确定')  # 确定事件发生时要处理的任务
        sg.Popup(values["-name-"], values["-sex-"], values["-nationality-"])  # 执行确认任务
        #  设定key,通过key获取值

    if event == '取消':
        print('取消')
        sg.Popup('取消')
    # 4.1.X 其他点击事件
    if event == 'Exit':
        sg.Popup('点击了Exit')
        break
    if event in ('Exit', None):
        sg.Popup('点击了Exit或窗口关闭')
        break
    if event.startswith('确认'):
        sg.Popup('点击以确认开头的按钮都执行')
        break
    if event.endswith('确认'):
        sg.Popup('点击以确认结尾的按钮都执行')
        break

    # 4.2窗口关闭事件
    if event == None:
        break
    # 与上述窗口关闭事件相同
    # if event == sg.WIN_CLOSED:
    #     break

    # 4.3 其他元素事件
    # 文本元素/输入框/下拉菜单等事件属性默认关闭的,手动设定enable_events=True,就可以执行事件
    if event == '姓名':
        sg.Popup('这个文本,别点了!')
# 5.关闭窗口
window.close()

3.主题设定及修改主题

    

 

# 主题主要包括:窗口背景颜色/文本Text颜色/按钮颜色/按钮字体颜色
import PySimpleGUI as sg

# 1.查看主题
# sg.theme_previewer()
# 查看主题名字
# print(sg.theme_list())

# 2.使用主题
sg.theme('Black')
sg.Popup('弹窗演示')
# 使用随机主题
# sg.theme('')
# sg.Popup('弹窗演示')

# 3.修改主题
# 3.1 获取主题参数
print(sg.theme_background_color())  # 主题_背景_颜色
print(sg.theme_border_width())  # 主题_边框_宽度
print(sg.theme_button_color())  # 主题_按钮_颜色
print(sg.theme_element_background_color())  # 主题_元素_背景_颜色
print(sg.theme_element_text_color())  # 主题_元素_文本_颜色
print(sg.theme_input_background_color())  # 主题_输入框_背景_颜色
print(sg.theme_input_background_color())  # 主题_输入框_文本_颜色
print(sg.theme_progress_bar_border_width())  # 主题_进度_栏_边框_颜色
print(sg.theme_progress_bar_color())  # 主题_进度_栏_颜色
print(sg.theme_slider_border_width())  # 主题_滑块_边框_颜色
print(sg.theme_slider_color())  # 主题_滑块_颜色
print(sg.theme_text_color())  # 主题_文本_颜色
print(sg.theme_text_element_background_color())  # 主题_文本_元素_背景颜色

# 3.2 修改主题
sg.theme_background_color(('#FFFFFF'))
sg.Popup('背景开灯了!')

 

4.文本元素设定及更新

 

 

# 1.导入库
import PySimpleGUI as sg

text = '''
定风波
宋 苏轼
莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。
'''

# 2.定义布局、确定行数
layout = [
    [sg.T(text,
          key='-Text-',  # 元素唯一标识符,用于元素定位
          size=(40, 8),  # 元素宽度,行高(int,int)
          font=('仿宋', 20),  # 字体名称,大小。形如font = ('宋体',int)
          auto_size_text=False,  # 当设定值为True,窗口自适应文本
          enable_events=True,  # 当设定问True,点击文本可以触发事件
          relief='raised',  # 浮雕设计 'raised'/'sunken'/'flat'/'ridge'/'solid'/'groove'
          border_width=5,  # 浮雕设定时,用于设定边界宽度
          text_color="red",  # 文本颜色
          background_color="white",  # 文本背景颜色
          justification="center",  # 对齐方式:'left','right','center'
          pad=None,  # 元素间隔间距((left,right),(top,bottom)) or (int,int) 前端~盒模型
          right_click_menu=['1', ['1', '2', '3']],  # 右击弹出菜单
          grab=True,  # 点击元素可以移动窗口
          tooltip='悬浮文本',  # 当光标置于元素上方,显示设定文本
          visible=True
          )],
    [sg.B('点赞', size=(20, 1)),
     sg.B('转发', size=(20, 1)),
     sg.B('投币', size=(20, 1))]
]

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

# 3.1 文本更新

# 4.事件循环
while True:
    event, values = window.read()

    if event == None:
        break
    if event == '-Text-':
        sg.popup("点了也没用!")
    if event in ('点赞', '转发', '投币'):
        window['-Text-'].update(
            value='谢谢支持!!!',  # 更新文本
            background_color="black",  # 更新文本背景颜色
            text_color='white',  # 文本颜色
            font=('黑体', 40),  # 字体和大小
            visible=True,  # 元素的可见状态,默认为True
        )

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

  

 5.简单的例子002——中英文切换

 

# 1.导入库
import PySimpleGUI as sg

# 2.定义布局、确定行数
layout = [
    [sg.B("中文", key='-Chinese-'), sg.B("English", key='-English-')],
    [sg.T("请输入基本信息!", key='-Text1-')],
    [sg.T("姓名 ", key='-Text2-', size=(8,1)), sg.In()],
    [sg.T("性别 ", key='-Text3-', size=(8,1)), sg.In()],
    [sg.T("国籍 ", key='-Text4-', size=(8,1)), sg.In()],
    [sg.B("确定 ", key='-Confirm-'), sg.B("取消", key='-Cancel-')],
]

# 3.创建窗口
window = sg.Window('中英文转换GUI', layout)

# 3.1 文本更新

# 4.事件循环
while True:
    event, values = window.read()
    # print(event)
    if event == None:
        break

    if event == '-English-':
        window['-Chinese-'].update('Chinese')
        window['-English-'].update('English')
        window['-Text1-'].update(value='Please enter basic information!'),
        window['-Text2-'].update(value='Name')
        window['-Text3-'].update(value='Sex')
        window['-Text4-'].update(value='Nationality')
        window['-Confirm-'].update('Confirm')
        window['-Cancel-'].update('Cancel')
        
    if event == '-Chinese-':
        window['-Chinese-'].update('中文')
        window['-Text1-'].update(value='请输入基本信息!')
        window['-Text2-'].update(value='姓名')
        window['-Text3-'].update(value='性别')
        window['-Text4-'].update(value='国籍')
        window['-Confirm-'].update('确定')
        window['-Cancel-'].update('取消')

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

  

6.输入框元素的设定与更新

 

 

# 1.导入库
import PySimpleGUI as sg

# 2.定义布局、确定行数
layout = [
    [sg.T("账号"), sg.In(
        '请输入您的账号',  # 默认值设定,可以为空字符串
        key='-INPUT1-',  # 元素标识符
        size=(30, None),  # 宽,行高
        disabled=False,  # 元素禁用,如果为True,则无法输入任何值
        password_char=None,  # 密码字符,一般设置为*
        justification='l',  # 对齐方式‘r’,'l','c'
        background_color='black',  # 输入框的颜色
        text_color='red',  # 输入框的文本颜色
        font=('黑体', 15),
        tooltip='悬浮提示',
        border_width=5,  # 输入框边界宽度设定
        enable_events=False,  # 输入框事件属性
        do_not_clear=True,  # 输入框的内容不被清除
        focus=False,  # 设定焦点
        pad=None,  # 元素间隔
        disabled_readonly_background_color='blue',  # 被禁用时的背景颜色设定
        disabled_readonly_text_color='white',  # 元素禁用时文本颜色设定
        right_click_menu=None,  # 右击按钮菜单
        visible=True,  # 元素可见状态,默认True
    )],
    [sg.T('密码'), sg.In(
        key='-INPUT2-',
        password_char='*',
        size=(30, None),  # 宽,行高
        font=('黑体', 15),
    )],
    [sg.B('确定'), sg.B('取消')]
]

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

# 3.1 文本更新

# 4.事件循环
while True:
    event, values = window.read()
    # print(event)
    if event == None:
        break

    if event == '确定':
        window['-INPUT1-'].SetFocus()  # 更新元素焦点
        window['-INPUT1-'].SetTooltip('更新悬浮文本')  # 更新悬浮文本
        window['-INPUT1-'].update(
            '死亡如风,常伴吾身。',  # 更新输入框内的文本
            disabled=False,  # 更新禁用状态,True变成只读
            select=False,  # 输入框内文本全选中
            visible=True,  # 更新元素的可见状态
            text_color='red',  # 更新文本颜色
            background_color='white',  # 更新输入框的背景颜色
            move_cursor_to='end',  # 光标移动到文本最后
        )
        window['-INPUT2-'].update(
            '汝欲赴死,易如反掌。',
        )  # 更新输入框内的文本

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

  

 7.简单的例子003——登录窗口

 

 

import PySimpleGUI as sg

data = {
    'admin': '123',
    'root': '123',
}

layout = [
    [sg.T('用户名', size=(6)), sg.In('请输入您的用户名', key='-user-')],
    [sg.T('密码', size=(6)), sg.In('', tooltip='密码为3位数字', key='-pwd-', password_char='*')],
    [sg.B('确定'), sg.B('取消')],
]

window = sg.Window('登录GUI', layout)

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

    if event == '确定':
        user = values['-user-']
        password = values['-pwd-']
        if data[user] == password:
            sg.popup("输入正确")
        else:
            sg.popup("输入错误")

window.close()

  

8.按键元素的设定及更新

 

 

 

import PySimpleGUI as sg

image_1 = r'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e3PldMBt7D/wwAMPPPAQ/ip5bQgAe/gTr2I64Lb2H3jggQceeAh/lbzBwYHPJXUTVSIDVOsb1E0pi+qedf9h7Qt7N62f/O5m76L1nt+x4abndtx8puh9yju699YPx7D/wAMPPPDAa84LunHwwAMPPPDAAy8ML+jGwQMPPPDAAw+8MLygGwcPPPDAAw888MLwgm4cPPDAAw888MALwzPVGPDAAw888MADz41nqjHggQceeOCBB15NnqnGgAceeOCBBx54CH/wwAMPPPDAAy+mjYMHHnjggQceeAh/8MADDzzwwANPmGeqMeCBBx544IEHnhvPVGPAAw888MADDzw3nqnGgAceeOCBBx54bjxTjQEPPPDAAw888Nx4phoDHnjggQceeOA5A+w0BjzwwAMPPPDAc4cE2zh44IEHHnjggReUF3Tj4IEHHnjggQde+7ygGwcPPPDAAw888NrnBd04eOCBBx544IEXhhd04+CBBx544IEHXhhe0I2DBx544IEHHnhheEE3Dh544IEHHnjgheEF3Th44IEHHnjggReGZ6ox4IEHHnjggQeeG89UY8ADDzzwwAMPvJo8U40BDzzwwAMPPPAQ/uCBBx544IEHXkwbBw888MADDzzwEP7ggQceeOCBB54wz1RjwAMPPPDAAw88N56pxoAHHnjggQceeG48U40BDzzwwAMPPPDceKYaAx544IEHHnjgufFMNQY88MADDzzwwHMG2GkMeOCBBx544IHnDgm2cfDAAw888MADLygv6MbBAw888MADD7z2eUE3Dh544IEHHnjgtc8LunHwwAMPPPDAAy8ML+jGwQMPPPDAAw+8MLygGwcPPPDAAw888MLwgm4cPPDAAw888MALwwu6cfDAAw888MADLwzPVGPAAw888MADDzw3nqnGgAceeOCBBx54brz/H+kV7kg02S7aAAAAAElFTkSuQmCC'
# 按键元素的设定及更新
layout = [
    [sg.B(
        key='-B1-',
        tooltip='按钮1的悬浮文本',
        disabled=False,  # 元素禁用设定
        # image_filename=r'D:\Python Project\代码总览\记事本\2217804.png',  # 图片路径,按键用图片显示(GIFs、PNGs)
        # 转换网站:https://base64.us/
        image_data=image_1,  # 图片路径,按键用图片显示(base64)
        image_size=(512,512),  # 图片大小,长宽
        image_subsample=1, # 设定为原图片的2=1/2
        border_width=1, # 按钮边界线
        size=(None,None), # 案件尺寸的设定
        auto_size_button= None, #案件文本自动调节
        button_color=None, # 案件颜色
        disabled_button_color=None, # 被禁用时的颜色
        font=None, # 字体名称,大小设定
        bind_return_key=True, # 绑定回车键,设定为True,回车键会使此元素点击
        focus = False,
        pad = None,
        visible=None
    ),
    sg.B(
        key='-B2-',
        image_filename=r'D:\Python Project\代码总览\记事本\2217802.png',
    )],
]

window = sg.Window('标题', layout)

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

    if event == None:
        break
    if event == '-B1-':
        window['-B1-'].Update(
            text='风遁、螺旋丸!',
            button_color=(),
            disabled=None, # 元素禁用设定
            image_data=None, # 图片base64格式
            image_filename=None,
            visible=None,
            image_subsample=None, # 元素大小设定
            disabled_button_color=(None,None),
            image_size=None,
        )
    if event == '-B2-':
        window['-B2-'].update(
            text='千鸟!!',
        )

window.close() 

 9.简单的例子004———红绿灯

 

 

import PySimpleGUI as sg

layout = [
    [sg.B(
        '绿灯',
        key='-GL-',
        size=(10, 5),
        font=('黑体', 20),
        button_color=('black', 'green'),  # 字体颜色/背景颜色
        tooltip='绿灯'
    )],
    [sg.B(
        '黄灯',
        key='-YL-',
        size=(10, 5),
        font=('黑体', 20),
        button_color=('black', 'yellow'),
        tooltip='黄灯',
    )],
    [sg.B(
        '红灯',
        key='-RL-',
        size=(10, 5),
        font=('黑体', 20),
        button_color=('black', 'red'),
        tooltip='红灯'
    )],
]

window = sg.Window('红绿灯', layout)

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

    if event == None:
        break
    if event == '-GL-':
        window['-GL-'].update(button_color=('black', 'green'),)
        window['-YL-'].update(button_color=('black', 'grey'), )
        window['-RL-'].update(button_color=('black', 'grey'), )
    if event == '-YL-':
        window['-GL-'].update(button_color=('black', 'grey'),)
        window['-YL-'].update(button_color=('black', 'yellow'), )
        window['-RL-'].update(button_color=('black', 'grey'), )
    if event == '-RL-':
        window['-GL-'].update(button_color=('black', 'grey'),)
        window['-YL-'].update(button_color=('black', 'grey'), )
        window['-RL-'].update(button_color=('black', 'red'), )

window.close()

  

 10.列表元素的设定和更新

    

import PySimpleGUI as sg

#  列表元素的设定和更新
# sg.Listbox()   =  sg.LB()
XY_list = ['熏悟空', '别龙马', '居八戒', '虾悟净', '疼三藏']

layout = [
    [sg.LB(
        XY_list,
        default_values='别龙马',  # 默认选中的值或列表
        key='-LB-',
        select_mode='single',  # 选择模式  single/multiple/browse/extended
        enable_events=False,  # 元素的事件属性
        bind_return_key=False,  # 绑定回车建
        size=(30, 4),  # 字符宽度和行高
        disabled=False,  # 元素是否禁用
        auto_size_text=None,  # 元素自动根据内容大小调整
        font=None,  # 字体名称和大小
        no_scrollbar=False,  # 为True 则没有滚动条
        background_color=None,  # 背景颜色设定
        text_color=None,  # 字体颜色设定
        pad=None,  # 元素间隔设定
        tooltip=None,  # 悬浮文本
        right_click_menu=None,  # 右击调出菜单
        visible=None,  # 元素可见状态设定
    )],
    [sg.B('嘻游记', key='1'), sg.B('葫芦娃', key='2')]
]

window = sg.Window('列表元素', layout)

while True:
    event, values = window.read()
    if event == None:
        break
    if event == '2':
        window['-LB-'].update(
            values=['大娃', '二娃', '三娃', '四娃', '五娃', '六娃', '七娃', ],  # 元祖或者列表
            set_to_index=2,  # 高亮显示某个值
            scroll_to_index=4,  # 将设定的索引显示在第一行
            select_mode=None,
            visible=None,
        )
    if event == '1':
        window['-LB-'].update(
            values=XY_list  # 元祖或者列表
        )

window.close()

  

 11.简单的例子005——点击列表调用字典的值

import PySimpleGUI as sg

dict = {
    '熏悟空': '天罡火',
    '别龙马': '突木桩',
    '居八戒': '地煞功',
    '虾悟净': '寒冰掌',
    '疼三藏': '救命啊!',
}

list = list(dict.keys())

layout = [
    [sg.LB(
        list,
        default_values='别龙马',  # 默认选中的值或列表
        key='-LB-',
        enable_events=True,  # 允许点击触发事件
        select_mode='single',  # 选择模式  single/multiple/browse/extended
        size=(30, 4),  # 字符宽度和行高
    )],
    [sg.T('绝招', key='1'), sg.In('', key='2', size=(26, 4))]
]

window = sg.Window('西游释厄传V0.000001', layout)

while True:
    event, values = window.read()
    print(values)
    if event == None:
        break
    if event == '-LB-':
        window['2'].update(
            dict[values['-LB-'][0]]
        )

window.close()

  

 

posted @ 2022-08-31 14:26  水墨黑  阅读(523)  评论(0编辑  收藏  举报