当前位置:   article > 正文

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

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主动事件(多线程执行耗时任务解决主线程卡死问题)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/759061
推荐阅读
相关标签
  

闽ICP备14008679号