使用 FreeSimpleGUI 定制图形界面

什么是FreeSimpleGUI?

FreeSimpleGUI是一个开源的图形用户界面库,旨在提供一个简单、易用的GUI解决方案。 它简化了窗口和元素的创建过程,通过一个简洁的布局定义系统,支持多种流行的 GUI 框架,包括 tkinter、Qt、WxPython 和 Remi。它通过封装这些框架的常用功能,提供了更简洁的 API,让你专注于应用逻辑而非繁杂的UI细节。

FreeSimpleGUI的特点

  • 简单易用:FreeSimpleGUI的API设计非常简单易用,任何人都可以轻松地使用它来创建GUI应用程序。

  • 免费:FreeSimpleGUI是完全免费的,不需要任何付费许可证,可以自由地使用和分发。

  • 跨平台:FreeSimpleGUI支持多种平台,包括Windows、MacOS和Linux等。

  • 高性能:FreeSimpleGUI具有高性能,能够快速地渲染和响应用户交互。

  • 灵活:FreeSimpleGUI提供了多种自定义选项,允许开发者根据需要进行自定义和调整。

技术应用示例

import FreeSimpleGUI as sg
from glob import glob

version = 0.8

# 界面布局
sg.theme('TanBlue')  # 图形界面布局

layout = [
    [sg.Text("重要资料目录夹: "), 
     sg.In(size=(35, 1), enable_events=True, key="_FOLDER_"),
     sg.FolderBrowse()],
    [sg.Text("水印大小: "),
     sg.Slider(range=(30, 100), resolution=10, default_value=60,
        size=(12, 15), border_width=1, text_color='navy',
        orientation='horizontal', key='_SCALE_')],
    [sg.Text('水印文字:'), 
     sg.InputText(size=(20, 1), key='_WORDS_')],
    [sg.Button('OK'),  sg.Button('Exit')],
]

types = ["png", "jpg", "jpeg"]

window = sg.Window(f'又拍云水印系统 v{version} -悟空', layout).Finalize()
while True:
    jpg_and_pngs = []
    event, values = window.read()
    if event in (None, 'Exit'):
        break
    elif event in (None, 'OK'):
        if values['_FOLDER_'] != "":
            if values['_WORDS_'] == "":
                sg.popup("水印文字不能为空!")
                continue
            for type in types:
                files = f"{values['_FOLDER_']}/*.{type}"
                this_type_files = glob(files)
                jpg_and_pngs += this_type_files
            if len(jpg_and_pngs) == 0:
                sg.popup("没有发现图片!")
                continue
            else:
                for f in jpg_and_pngs:
                    if IsValidImage(f):
                        add_mark_png(f, values['_WORDS_'], values['_SCALE_'])
                    else:
                        sg.popup("图片格式与后缀名不符!")
                        continue
            sg.popup("处理完毕!")
        else:
            sg.popup("目录不能为空!")
window.close()

links

social