• 【Python】Python图形化界面库PySimpleGUI的简单使用


    1.说明

    能实现Python的图形化界面的库挺多的,比较出名的可能是tkinter、PyQt等,但它们都不够快速,PySimpleGUI就是一个可以让我们快速创建图形界面的库,它整合了 tkinter、Qt、WxPython 和 Remi等库,让我们使用简单代码就能创建出不错的界面

    在使用之前,可以先安装一下

    pip install pysimplegui
    
    • 1
    2.主窗口
    import PySimpleGUI as sg
    
    # 设置主题
    # sg.theme('DarkAmber')
    
    # 界面布局
    layout = [
        [sg.Text('个人信息')],
        [sg.Text('姓名'), sg.InputText()],
        [sg.Text('年龄'), sg.InputText(key="input_age")],
        [sg.Button('提交'), sg.Button('取消')]
    ]
    
    # 设置主窗口
    window = sg.Window('填写信息', layout)
    
    # 事件循环,监听事件的事件名和对应的值
    while True:
        event, values = window.read()
    
        if event == sg.WIN_CLOSED:
            break
        elif event == "提交":
            print(event)  # 提交
            print(values)  # {0: 'pan', 'input_age': '18'}
        elif event == "取消":
            break
    
    # 关闭窗口
    window.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    首先要实例化一个Window对象,表示一个界面窗口,但它的构造方法里有几十个参数,我们只指定前两个,分别是窗口标题和窗口布局,布局是一个列表,列表里是各种窗口控件,有了Window对象之后要使用死循环不断调用read()方法,主要作用是监听各种事件,我们通过事件名判断要执行上面代码,如果是关闭窗口则事件名是None,这时候跳出死循环之后调用Window对象的close()方法释放资源,然后程序正常结束就行
    在这里插入图片描述

    3.布局

    Window对象的第二个参数是布局,布局要传入一个列表,列表里可以嵌套列表,每一个列表里的元素都会在同一行显示,换句话说,如果想要不同行,那就把它们放在不同的列表里

    layout = [
        # 第一行
        [sg.Text('个人信息')],
        # 第二行
        [sg.Text('姓名'), sg.InputText()],
        # 第三行
        [sg.Text('年龄'), sg.InputText(key="input_age")],
        # 第四行
        [sg.Button('提交'), sg.Button('取消')]
    ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    4.文本控件(文本控件)

    一个图形界面里有各种控件,比如说文本、输入框、按钮、选择框等,但它们很多属性都是共有的,因为它们都继承与Element对象,此处先以Text为例看一下。Text对象主要用于显示文本,Text对象构造方法的参数很多,但常用的不多

    sg.Text(
        text='个人信息',  # 文本
        size=(10, 2),  # 字体大小
        font=("黑体", 100),  # 字体及字号
        text_color="#aa99ff",  # 字体颜色
        background_color="gray",  # 背景颜色
        enable_events=True,  # 允许开启实际,默认是False
        auto_size_text=False,  # 是否根据文本大小自动调整窗口大小
        key="txtInfo",  # 指定key
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    5.更新控件

    想要更新控件,第一件事就是拿到控件,我们把各种控件通过layout与Window绑定在一起,所以也可以通过中括号的方式取出控件,然后修改控件的属性,但要调用Element对象提供的update()方法才能把修改后的效果更新到界面上。Text是继承Element的,所以它自然也有update()方法

    import PySimpleGUI as sg
    
    layout = [
        [sg.Text(text='原始信息', key="txtInfo", )],
        [sg.Button('修改'), sg.Button('取消')]
    ]
    
    window = sg.Window('Demo', layout, size=(500, 200))
    
    while True:
        event, values = window.read()
    
        if event == sg.WIN_CLOSED:
            break
        elif event == "修改":
            window["txtInfo"].update(
                value="修改之后的信息",
                text_color="red",
                font=("黑体", 20)
            )
        elif event == "取消":
            break
    
    window.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    6.输入框

    输入框也是继承Element对象的,所以key、字体、背景等设置在Text控件那里已经演示了,这里只给Input对象常用的属性

    sg.InputText(
        default_text="请输入你的名字",  # 默认文本
        disabled=False,  # 是否禁止输入
        password_char="*",  # 如果设置了密码字符,那输入的文本就会被替换
        justification="left",  # 文本对齐方式,left, right, center
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    7.文件选择框

    文件选择框有好几种,比如说选择单个文件、选择多个文件、选择文件夹、另存为等,但它们只是对象名不同而已,参数用法都是一样的,所以掌握一个就行了

    import PySimpleGUI as sg
    
    layout = [
        [
            sg.FileBrowse(
                button_text="请选择单个文件",  # 按钮文本
                target="single_path",  # 把选择后的路径保存到key为input_path的对象
                # file_types=(("All Files", "*.*"),),  # 默认筛选全部文件类型
                file_types=(("All Files", "*.png"),),  # 筛选png类型
                initial_folder=r"C:\Users\admin\Downloads",
            ),
            sg.InputText(key="single_path"),
        ],
        [
            sg.FilesBrowse(
                button_text="请选择多个文件",
                initial_folder=r"C:\Users\admin\Downloads",
                target="multy_path"
            ),
            sg.InputText(key="multy_path")
        ],
        [
            sg.FolderBrowse(
                button_text="请选择文件夹",
                initial_folder=r"C:\Users\admin\Downloads",
                target="folder_path"
            ),
            sg.InputText(key="folder_path")
        ],
        [
            sg.SaveAs(
                button_text="另存为",
                initial_folder=r"C:\Users\admin\Downloads",
                target="save_as_path"
            ),
            sg.InputText(key="save_as_path")
        ],
    ]
    
    window = sg.Window('Demo', layout, size=(500, 200))
    
    while True:
        event, values = window.read()
    
        if event == sg.WIN_CLOSED:
            break
    
    window.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    8.设置主题

    pysimplegui自带了很多主题,你可以使用预览和查看主题名

    import PySimpleGUI as sg
    
    # 预览全部主题 
    sg.theme_previewer()
    # 查看主题名
    print(sg.theme_list())
    # 设置指定主题
    sg.theme("主题名称")
    # 设置一个随机主题
    sg.theme("")  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    9.打包程序

    如果你已经做好了一个漂亮的程序,那肯定少不了打开成EXE文件,这样就可以在没有安装Python的环境下运行程序了。把Python代码打包为可执行程序的方式很多,比如说pyinstaller、py2exe、nuitka等,但既然是使用PysimpleGUI做的,肯定使用对应的打包工具更方便点,这个库是pysimplegui-exemaker,需要安装一下

    pip install pysimplegui-exemaker
    
    • 1

    安装好之后再终端或者命令行窗口打开它

    python -m pysimplegui-exemaker.pysimplegui-exemaker
    
    • 1

    这样我们就可以使用窗口点击需要打开的程序进行打包了
    在这里插入图片描述

    其实pysimplegui-exemaker本质上也是调用一下PyInstaller,所以你当然也可以直接在命令行执行打包命令

    pip install PyInstaller
    pyinstaller -wF my_program.py
    
    • 1
    • 2

    以上代码都是在主线程执行的,如果主线程遇到耗时任务则UI界面就会卡住或者假死,解决方法就是改为多线程,可以参考
    【Python】pysimplegui主动事件(多线程执行耗时任务解决主线程卡死问题)

  • 相关阅读:
    Vue2路由知识大杂烩, 一下给你全整明白(上)
    Java Virtual Machine(一)
    面试题 01.09.字符串轮转
    基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入
    vue3学习之路-准备工作
    Thymeleaf将字符串转换为数字
    xray证书安装使用及Burp联动
    机器学习基础-手写数字识别
    数字货币风暴:比特币价格突破历史新高,引发金融市场震荡
    前端面试题之性能优化篇
  • 原文地址:https://blog.csdn.net/qq_39147299/article/details/127834480