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

2023-05-16

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()方法释放资源,然后程序正常结束就行
在这里插入图片描述

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

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

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

pip install PyInstaller
pyinstaller -wF my_program.py

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】Python图形化界面库PySimpleGUI的简单使用 的相关文章

  • hal库中的UART使用

    1 初始化串口 UART initStruct span class token punctuation span Instance span class token operator 61 span USART1 span class t
  • f103 hal库中gpio外部中断使用

    1初始化引脚 与配置通用管脚一样 xff0c 只是mode改成中断触发条件 GPIO InitTypeDef GPIO InitStruct span class token punctuation span GPIO InitStruct
  • f103 hal RTC_alarm使用方法

    1 初始化RTC RTC handle span class token punctuation span Instance span class token operator 61 span span class token consta
  • 系统的TPS不达标,此时如何优化

    对系统进行压测 xff0c 比如每秒压个几百请求到几千请求 xff0c 甚至上万请求 xff0c 此时发现死活压不上去 xff0c 压来压去 xff0c 你的系统最多每秒就处理几百个请求 xff0c 根本到不了几千个请求 xff0c 此时就
  • f103 hal库中PWM的使用方法

    1 初始化复用管脚 span class token keyword void span span class token function BEEP Init span span class token punctuation span
  • EFR32FG14 使用定时器TIMER做毫秒级定时

    EFR32FG14 使用定时器TIMER做毫秒级定时 1 添加头文件 span class token macro property span class token directive keyword include span span
  • EFR32FG14 UART的使用方法

    EFR32FG14 UART的使用方法 1 初始化串口 xff08 PA0 gt TX PA1 gt RX xff09 span class token keyword void span span class token function
  • EFR32解锁方法

    EFR32锁住的解锁方法 在某些情况下 xff0c 芯片可能会被锁住 xff0c 导致J LINK等工具连接不上 xff0c 可以参考如下方法 xff1a 1 进入commander exe所在的目录 xff1b 按住Shift 43 右键
  • TFT1.44寸屏ST7735S屏幕使用-stm32f103c8t6

    TFT1 44寸屏ST7735S屏幕使用 stm32f103c8t6 K xff1a 背景灯 RESET xff1a tft复位 RS xff1a 控制线 xff08 数据或者命令 xff09 SDA xff1a 数据线 xff08 SPI
  • 8421拨码器 R7H3-16 的使用

    8421拨码器 R7H3 16 的使用 使用方法极其简单 xff0c 1 2 4 8脚分解与单片机的4个IO脚连接 xff0c IO配置为输入即可 0代表低电平 xff0c 1代表高电平 档位 脚位124801111101112101130
  • Ubuntu 18 上不了网解决方法

    Ubuntu 18 出现网络异常 1 打开命令行 Ctrl 43 Alt 43 t 2 关闭网络 sudo service network manager stop 3 删除网络 sudo rm var lib NetworkManager
  • GPIO引脚 模拟 IIC(软件IIC)

    GPIO引脚 模拟 IIC 软件IIC IIC总线在传输数据的过程中一共有三种类型信号 xff0c 分别为 xff1a 开始信号 结束信号和应答信号 IIC总线的时序图 xff1a 空闲状态 当IIC总线的数据线SDA和时钟线SCL两条信号
  • ESP32/ESP8266 MQTT协议接入阿里云(一)

    ESP32 ESP8266 MQTT协议接入阿里云 xff08 一 xff09 1 搭建阿里云环境 xff08 1 xff09 跳转连接 xff1a https iot console aliyun com lk summary new x
  • ESP32/ESP8266 MQTT协议接入阿里云(二)

    ESP32 ESP8266 MQTT协议接入阿里云 xff08 二 xff09 1 在连接阿里云之前 xff0c 需要先了解MQTT的连接协议 CONNECT 协议格式 xff1a 固定包头 43 可变包头 43 有效载体 xff08 1
  • https是如何验证证书的有效性的

    证书验证的过程是使用非对称加密的 xff0c 客户端对服务器端发起请求 xff0c 服务器返回一个证书 xff0c 客户端验证这个证书的合法性 xff0c 如果这个证书是合法的 xff0c 那么就生成一个随机值 xff0c 利用这个随机值作
  • Kali Linux 更新源

    vi etc apt source list 添加下列更新源 中科大 deb http mirrors ustc edu cn kali kali rolling main non free contrib deb src http mir
  • 安装所有Kali 工具包

    apt get kali linux all
  • 路由选路三原则

    路由选路的三原则 最长掩码匹配原则AD值 Administrative Distance 通告距离 路由类型AD值Connect0Static1EIGRP Summary5EBGP20EIGRP 内部90OSPF110RIP120EIGRP
  • OSPF7种状态

  • CentOS 7 由原来的root@localhost~# 变成了-bash-4.2#

    发生这种原因可能是 root 目录下缺少了几个配置 bashrc 和 bash profile 进入 etc skel 目录下 将 bashrc 和 bash profile复制到 root 目录下 1 cp etc skel bashrc

随机推荐