头图

大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。

更多Python学习内容:http://ipengtao.com

今天为大家分享一个神奇的 Python 库 - PySimpleGUI。

Github地址:https://github.com/PySimpleGUI/PySimpleGUI


在开发桌面应用程序时,图形用户界面(GUI)是一个重要的组成部分。虽然有许多 GUI 库可以选择,但它们通常需要编写大量的代码来实现复杂的界面。PySimpleGUI 是一个基于 Python 的 GUI 库,它通过简化的 API,使得开发 GUI 变得更加容易和高效。PySimpleGUI 支持多个 GUI 后端,如 Tkinter、Qt、WxPython 和 Remi,能够满足不同平台和需求的开发者。本文将详细介绍 PySimpleGUI 库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

安装

要使用 PySimpleGUI 库,首先需要安装它。可以通过 pip 工具方便地进行安装。

以下是安装步骤:

pip install PySimpleGUI

安装完成后,可以通过导入 PySimpleGUI 库来验证是否安装成功:

import PySimpleGUI as sg
print("PySimpleGUI 库安装成功!")

特性

  1. 简化的 API:提供简洁易用的 API,使得 GUI 开发更加简单和快速。
  2. 多后端支持:支持 Tkinter、Qt、WxPython 和 Remi 多个 GUI 后端,能够在不同平台上运行。
  3. 丰富的控件:提供多种控件,如按钮、文本框、复选框、单选按钮、进度条等,满足各种应用需求。
  4. 布局管理:支持灵活的布局管理,用户可以轻松地定义界面布局。
  5. 事件驱动编程:支持事件驱动编程模式,方便处理用户交互。

基本功能

创建一个简单窗口

使用 PySimpleGUI,可以方便地创建一个简单窗口。

import PySimpleGUI as sg

# 定义窗口的布局
layout = [[sg.Text('Hello, PySimpleGUI!')],
          [sg.Button('OK')]]

# 创建窗口
window = sg.Window('Simple Window', layout)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'OK':
        break

window.close()

获取用户输入

PySimpleGUI 支持获取用户输入。

import PySimpleGUI as sg

# 定义窗口的布局
layout = [[sg.Text('请输入你的名字:')],
          [sg.InputText()],
          [sg.Button('提交'), sg.Button('取消')]]

# 创建窗口
window = sg.Window('用户输入', layout)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '取消':
        break
    if event == '提交':
        sg.popup(f'你好, {values[0]}!')

window.close()

显示消息框

PySimpleGUI 支持显示消息框。

import PySimpleGUI as sg

# 显示消息框
sg.popup('这是一个消息框', '你可以在这里显示信息。')

高级功能

使用多窗口

PySimpleGUI 支持多窗口操作。

import PySimpleGUI as sg

# 定义主窗口的布局
layout1 = [[sg.Text('这是主窗口')],
           [sg.Button('打开子窗口'), sg.Button('退出')]]

# 创建主窗口
window1 = sg.Window('主窗口', layout1)

# 事件循环
while True:
    event, values = window1.read()
    if event == sg.WIN_CLOSED or event == '退出':
        break
    if event == '打开子窗口':
        # 定义子窗口的布局
        layout2 = [[sg.Text('这是子窗口')],
                   [sg.Button('关闭')]]

        # 创建子窗口
        window2 = sg.Window('子窗口', layout2)

        # 子窗口事件循环
        while True:
            event2, values2 = window2.read()
            if event2 == sg.WIN_CLOSED or event2 == '关闭':
                break

        window2.close()

window1.close()

自定义主题

PySimpleGUI 支持自定义主题。

import PySimpleGUI as sg

# 设置自定义主题
sg.theme('DarkAmber')

# 定义窗口的布局
layout = [[sg.Text('自定义主题')],
          [sg.Button('OK')]]

# 创建窗口
window = sg.Window('自定义主题窗口', layout)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'OK':
        break

window.close()

使用图像和图形

PySimpleGUI 支持显示图像和绘制图形。

import PySimpleGUI as sg

# 定义窗口的布局
layout = [[sg.Image('example.png')],
          [sg.Button('OK')]]

# 创建窗口
window = sg.Window('显示图像', layout)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'OK':
        break

window.close()

动态更新界面

PySimpleGUI 支持动态更新界面。

import PySimpleGUI as sg
import time

# 定义窗口的布局
layout = [[sg.Text('动态更新示例', key='-TEXT-')],
          [sg.Button('开始'), sg.Button('停止')]]

# 创建窗口
window = sg.Window('动态更新窗口', layout)

# 事件循环
running = False
while True:
    event, values = window.read(timeout=100)
    if event == sg.WIN_CLOSED or event == '停止':
        break
    if event == '开始':
        running = True

    if running:
        window['-TEXT-'].update(time.strftime('%Y-%m-%d %H:%M:%S'))
        time.sleep(1)

window.close()

实际应用场景

文件选择对话框

在文件管理应用中,通过 PySimpleGUI 实现文件选择对话框,方便用户选择文件。

import PySimpleGUI as sg

# 定义窗口的布局
layout = [[sg.Text('请选择一个文件')],
          [sg.Input(), sg.FileBrowse()],
          [sg.OK(), sg.Cancel()]]

# 创建窗口
window = sg.Window('文件选择对话框', layout)

# 事件循环
while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Cancel'):
        break
    if event == 'OK':
        sg.popup('你选择的文件是:', values[0])

window.close()

进度条

在需要显示任务进度的应用中,通过 PySimpleGUI 实现进度条,实时更新任务进度。

import PySimpleGUI as sg
import time

# 定义窗口的布局
layout = [[sg.Text('进度条示例')],
          [sg.ProgressBar(100, orientation='h', size=(20, 20), key='-PROGRESS-')],
          [sg.Button('开始'), sg.Button('停止')]]

# 创建窗口
window = sg.Window('进度条窗口', layout)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '停止':
        break
    if event == '开始':
        for i in range(101):
            window['-PROGRESS-'].update(i)
            time.sleep(0.1)

window.close()

简易计算器

实现一个简易计算器,通过 PySimpleGUI 进行基本的加减乘除运算。

import PySimpleGUI as sg

# 定义窗口的布局
layout = [[sg.Input(size=(20, 1), key='-DISPLAY-')],
          [sg.Button('7'), sg.Button('8'), sg.Button('9'), sg.Button('/')],
          [sg.Button('4'), sg.Button('5'), sg.Button('6'), sg.Button('*')],
          [sg.Button('1'), sg.Button('2'), sg.Button('3'), sg.Button('-')],
          [sg.Button('0'), sg.Button('.'), sg.Button('='), sg.Button('+')],
          [sg.Button('清除')]]

# 创建窗口
window = sg.Window('简易计算器', layout)

# 事件循环
current_input = ''
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event in '0123456789.':
        current_input += event
        window['-DISPLAY-'].update(current_input)
    if event in '+-*/':
        current_input += ' ' + event + ' '
        window['-DISPLAY-'].update(current_input)
    if event == '=':
        try:
            result = eval(current_input)
            window['-DISPLAY-'].update(result)
            current_input = str(result)
        except Exception as e:
            window['-DISPLAY-'].update('错误')
            current_input = ''
    if event == '清除':
        current_input = ''
        window['-DISPLAY-'].update(current_input)

window.close()

总结

PySimpleGUI 库是一个功能强大且易于使用的 GUI 开发工具,能够帮助开发者在 Python 项目中高效地创建和管理图形用户界面。通过提供简化的 API、多后端支持、丰富的控件和灵活的布局管理,PySimpleGUI 能够满足各种复杂的 GUI 应用需求。本文详细介绍了 PySimpleGUI 库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握 PySimpleGUI 库的使用,并在实际项目中发挥其优势。


涛哥聊Python
59 声望39 粉丝