1.说明

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

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

pip install pysimplegui

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

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

python自带图形界面 python简单图形界面_python自带图形界面

3.布局

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

layout = [
    # 第一行
    [sg.Text('个人信息')],
    # 第二行
    [sg.Text('姓名'), sg.InputText()],
    # 第三行
    [sg.Text('年龄'), sg.InputText(key="input_age")],
    # 第四行
    [sg.Button('提交'), sg.Button('取消')]
]

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
)

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

6.输入框

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

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

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

8.设置主题

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

import PySimpleGUI as sg

# 预览全部主题 
sg.theme_previewer()
# 查看主题名
print(sg.theme_list())
# 设置指定主题
sg.theme("主题名称")
# 设置一个随机主题
sg.theme("")

9.打包程序

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

pip install pysimplegui-exemaker

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

python -m pysimplegui-exemaker.pysimplegui-exemaker

这样我们就可以使用窗口点击需要打开的程序进行打包了

python自带图形界面 python简单图形界面_python自带图形界面_02

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

pip install PyInstaller
pyinstaller -wF my_program.py

以上代码都是在主线程执行的,如果主线程遇到耗时任务则UI界面就会卡住或者假死,解决方法就是改为多线程