python使用PySimpleGUI快速搭建简易的界面

更新日期
2024.2.16

安装环境

pip install PySimpleGUI 

第一个窗体示例

使用PySimpleGUI 制作一个窗体,复制如下代码运行,就可以得到如下的窗口:

import PySimpleGUI as sg      

layout = [[sg.Text('My one-shot window.')],      
                 [sg.InputText()],      
                 [sg.Submit(), sg.Cancel()]]   #布局:需要的各个内容   
window = sg.Window('Window Title', layout)     #按照布局进行配置窗体,
event, values = window.read()    				#event就是点击按钮的反馈,values就是返回的数值,
window.close()									#关闭窗体
text_input = values[0]   						#把获得的数值给变量 
sg.popup('You entered', text_input)				#弹窗,显示变量。

在这里插入图片描述
这个简单的解释一下:
window就是窗体,layout就是自动化布局,event, values就是其中的返回值。

N个的窗体制作

在window10,要制作一个简单的小程序,需要一个输入,显示,以及按钮,看了一些资料,使用PySimpleGUI,主要是本人是个小白,花太多的时间精力来做个一个界面没有必要,很多复杂的 GUI 也仅需不到 20 行代码。

最便捷的创建方式:从 PySimpleGUI 经典实例中拷贝一份代码
具体操作流程如下

  • 找到一个与你需求最接近的 GUI
  • 从经典实例中拷贝代码(官方提供了所有的demo,直接下载,link见参考。)
  • 粘贴到 IDE 中并运行

示例下载: https://docs.pysimplegui.com/en/latest/demo_screenshots/
需要科学上网。

所有的元素集合

为了方便使用,将使用的常规元素集合如下, 得到如下的图形界面,后续根据自己的项目要求,对其中的文件进行内容的修改就可以了。

在这里插入图片描述

import PySimpleGUI as sg

"""
    Demo - Element List
    All elements shown in 1 window as simply as possible.
    Copyright 2022-2023 PySimpleSoft, Inc. and/or its licensors. All rights reserved.
    Redistribution, modification, or any other use of PySimpleGUI or any portion thereof is subject to the terms of the PySimpleGUI License Agreement available at https://eula.pysimplegui.com.    
    You may not redistribute, modify or otherwise use PySimpleGUI or its contents except pursuant to the PySimpleGUI License Agreement.
"""

use_custom_titlebar = True if sg.running_trinket() else False
def make_window(theme=None):
    NAME_SIZE = 23


    def name(name):
        dots = NAME_SIZE-len(name)-2
        return sg.Text(name + ' ' + '•'*dots, size=(NAME_SIZE,1), justification='r',pad=(0,0), font='Courier 10')

    sg.theme(theme)

    # NOTE that we're using our own LOCAL Menu element
    if use_custom_titlebar:
        Menu = sg.MenubarCustom
    else:
        Menu = sg.Menu

    treedata = sg.TreeData()

    treedata.Insert("", '_A_', 'Tree Item 1', [1234], )
    treedata.Insert("", '_B_', 'B', [])
    treedata.Insert("_A_", '_A1_', 'Sub Item 1', ['can', 'be', 'anything'], )

    layout_l = [
                [name('Text'), sg.Text('Text')],
                [name('Input'), sg.Input(s=15)],
                [name('Multiline'), sg.Multiline(s=(15,2))],
                [name('Output'), sg.Output(s=(15,2))],
                [name('Combo'), sg.Combo(sg.theme_list(), default_value=sg.theme(), s=(15,22), enable_events=True, readonly=True, k='-COMBO-')],
                [name('OptionMenu'), sg.OptionMenu(['OptionMenu',],s=(15,2))],
                [name('Checkbox'), sg.Checkbox('Checkbox')],
                [name('Radio'), sg.Radio('Radio', 1)],
                [name('Spin'), sg.Spin(['Spin',], s=(15,2))],
                [name('Button'), sg.Button('Button')],
                [name('ButtonMenu'), sg.ButtonMenu('ButtonMenu', sg.MENU_RIGHT_CLICK_EDITME_EXIT)],
                [name('Slider'), sg.Slider((0,10), orientation='h', s=(10,15))],
                [name('Listbox'), sg.Listbox(['Listbox', 'Listbox 2'], no_scrollbar=True,  s=(15,2))],
                [name('Image'), sg.Image(sg.EMOJI_BASE64_HAPPY_THUMBS_UP)],
                [name('Graph'), sg.Graph((125, 50), (0,0), (125,50), k='-GRAPH-')]  ]

    layout_r  = [[name('Canvas'), sg.Canvas(background_color=sg.theme_button_color()[1], size=(125,40))],
                [name('ProgressBar'), sg.ProgressBar(100, orientation='h', s=(10,20), k='-PBAR-')],
                [name('Table'), sg.Table([[1,2,3], [4,5,6]], ['Col 1','Col 2','Col 3'], num_rows=2)],
                [name('Tree'), sg.Tree(treedata, ['Heading',], num_rows=3)],
                [name('Horizontal Separator'), sg.HSep()],
                [name('Vertical Separator'), sg.VSep()],
                [name('Frame'), sg.Frame('Frame', [[sg.T(s=15)]])],
                [name('Column'), sg.Column([[sg.T(s=15)]])],
                [name('Tab, TabGroup'), sg.TabGroup([[sg.Tab('Tab1',[[sg.T(s=(15,2))]]), sg.Tab('Tab2', [[]])]])],
                [name('Pane'), sg.Pane([sg.Col([[sg.T('Pane 1')]]), sg.Col([[sg.T('Pane 2')]])])],
                [name('Push'), sg.Push(), sg.T('Pushed over')],
                [name('VPush'), sg.VPush()],
                [name('Sizer'), sg.Sizer(1,1)],
                [name('StatusBar'), sg.StatusBar('StatusBar')],
                [name('Sizegrip'), sg.Sizegrip()]  ]

    # Note - LOCAL Menu element is used (see about for how that's defined)
    layout = [[Menu([['File', ['Exit']], ['Edit', ['Edit Me', ]]],  k='-CUST MENUBAR-',p=0)],
              [sg.T('PySimpleGUI Elements - Use Combo to Change Themes', font='_ 14', justification='c', expand_x=True)],
              [sg.Checkbox('Use Custom Titlebar & Menubar', use_custom_titlebar, enable_events=True, k='-USE CUSTOM TITLEBAR-', p=0)],
              [sg.Col(layout_l, p=0), sg.Col(layout_r, p=0)]]

    window = sg.Window('The PySimpleGUI Element List', layout, finalize=True, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT, keep_on_top=True, use_custom_titlebar=use_custom_titlebar)

    window['-PBAR-'].update(30)                                                     # Show 30% complete on ProgressBar
    window['-GRAPH-'].draw_image(data=sg.EMOJI_BASE64_HAPPY_JOY, location=(0,50))   # Draw something in the Graph Element

    return window


window = make_window()

while True:
    event, values = window.read()
    # sg.Print(event, values)
    if event == sg.WIN_CLOSED or event == 'Exit':
        break

    if values['-COMBO-'] != sg.theme():
        sg.theme(values['-COMBO-'])
        window.close()
        window = make_window()
    if event == '-USE CUSTOM TITLEBAR-':
        use_custom_titlebar = values['-USE CUSTOM TITLEBAR-']
        sg.set_options(use_custom_titlebar=use_custom_titlebar)
        window.close()
        window = make_window()
    if event == 'Edit Me':
        sg.execute_editor(__file__)
    elif event == 'Version':
        sg.popup_scrolled(__file__, sg.get_versions(), keep_on_top=True, non_blocking=True)
window.close()

参考

使用手册(官方手册): https://pysimplegui.readthedocs.io/en/latest/cookbook/
示例下载: https://docs.pysimplegui.com/en/latest/demo_screenshots/
中文参考文件(2018年): https://linux.cn/article-10027-1.html

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您介绍使用 PySimpleGUI 搭建一个简易计算机 API 的方法。 首先,您需要安装 PySimpleGUI。可以使用以下命令在命令行中安装: ``` pip install PySimpleGUI ``` 然后,您需要创建一个 Python 文件,例如 `calculator.py`。 接下来,您可以使用以下代码作为您的起点: ```python import PySimpleGUI as sg # 定义布局 layout = [[sg.InputText(size=(25,1), key='input')], [sg.Button('1'), sg.Button('2'), sg.Button('3'), sg.Button('+')], [sg.Button('4'), sg.Button('5'), sg.Button('6'), sg.Button('-')], [sg.Button('7'), sg.Button('8'), sg.Button('9'), sg.Button('*')], [sg.Button('C'), sg.Button('0'), sg.Button('='), sg.Button('/')], [sg.Text('', size=(20,1), key='output')]] # 创建窗口 window = sg.Window('计算器', layout) # 计算函数 def calculate(num1, num2, operator): if operator == '+': return num1 + num2 elif operator == '-': return num1 - num2 elif operator == '*': return num1 * num2 elif operator == '/': return num1 / num2 else: return None # 主循环 num1 = '' num2 = '' operator = '' while True: event, values = window.read() if event == sg.WINDOW_CLOSED: break elif event == 'C': num1 = '' num2 = '' operator = '' window['input'].update('') window['output'].update('') elif event in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']: if operator == '': num1 += event else: num2 += event window['input'].update(num1 + operator + num2) elif event in ['+', '-', '*', '/']: operator = event window['input'].update(num1 + operator + num2) elif event == '=': if num1 != '' and num2 != '' and operator != '': result = calculate(float(num1), float(num2), operator) window['output'].update(str(result)) else: window['output'].update('Error') # 关闭窗口 window.close() ``` 这个程序将会创建一个窗口,其中包含一些按钮和输入框。您可以使用这些按钮来输入数字和运算符,并计算结果。当您点击“=”按钮时,程序将会计算结果,并在输出框中显示结果。 请注意,这只是一个简单的示例程序,它只支持四种基本运算。您可以根据自己的需要进行调整和修改,并添加更多的功能。 希望这个例子对您有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值