PySimpleGUI复杂C/S系统开发(多窗口等)

本文介绍了如何使用PySimpleGUI进行C/S客户端系统开发,对比了多种PythonGUI库,推荐PySimpleGUI因其易于快速开发且成本较低。文章详细讲解了PySimpleGUI的入门代码和实际应用,包括窗口组件、事件处理和界面更新等内容。
摘要由CSDN通过智能技术生成

Python PySimpleGUI复杂客户端系统开发(多窗口等)

目录

0.需求

1.前提

2.入门代码        

3.实际代码

4.界面


0.需求

       C/S客户端系统开发、快速开发、短暂开发、成本低、界面不要求酷炫!!!那么可以考虑PySimpleGUI

        注意:PySimpleGUI 5 需要注册密钥,商业需要花钱,因此采用4.60.5版本,免费!!!

        1. Qt(c++)、winform和.net(c#)、Java、Go、这些编程、库的GUI学习成本高,若想快速开发和短暂开发,不推荐这个(不过也和个人熟悉程度有关,优先使用自己熟悉的语言编程-个人搞深度学习-优先Python);

        2. 采用Python进行客户端GUI界面开发,有好几个库可用

        Gooey 2021年就不更新了,基于Wxpython,像argparse解析参数一样,但是不能可视化图片,可以读取路径! 极其简单操作可以,但不推荐。

        dearpygui 一直更新,底层是c++,这是python接口,打开文件选择的窗口是独有的,不方便,尽管功能复杂强大,但是不如学pyqt6、pyside6,不推荐。

        Tkinter是python内置库,但是也需要学习很多内容,不利于快速,界面不酷炫-导致基于此库开发的PySimpleGUI界面也不酷炫,实用为主吧,要想酷炫且python下推荐pyqt和pyside6(可自定义酷炫样式、底层是c++性能更高)。

         PySimpleGUI最符合条件①PySimpleGUI(主要库,基于Python自带的GUI图形设计库Tkinter);②PySimpleGUIWX(基于GUI图形设计库WxPython);③PySimpleGUIQT(基于GUI图形设计库PySide2);④PySimpleGUIWEB(基于GUI网页端图形设计库Remi)

        pyqt5、6 GPL协议,若商业化需要购买(尽管很多人不关心),Qt的python接口(文档多、用户多)

        pyside6 官方QT6的python接口,文档不如pyqt6多一些,但功能基本相同,若进行更复杂、更灵活、更好看界面时,且用python时,可推荐。

        总之,根据第一句话,判断我需要pysimplegui开发GUI。

1.前提

       学习资料: PySimpleGUI-githubPySimpleGUI官网、B站上也有个UP主(非本人)有个系列视频教程(方便入门,可快进查看、可打好基础,对于复杂操作,这个视频未写,但是也很好了,本质都是看官网文档,挨个查英文API文档,再挨个试试)

        PySimpleGUI默认是基于python内置库tkinker的高级库,旨在简化、快速开发客户端界面!

        经验:1个窗口界面写1个函数,每个窗口函数包含:布局layout、窗口事件event(持久化窗口有while True代码,里面写各种操作)

2.入门代码        

# 摘自-官方github 每个窗口都要有如下5个步骤
import PySimpleGUI as sg                        # Part 1 - The import
# Define the window's contents
layout = [  [sg.Text("What's your name?")],     # Part 2 - The Layout
            [sg.Input()],
            [sg.Button('Ok')] ]
# Create the window
window = sg.Window('Window Title', layout)      # Part 3 - Window Defintion
# Display and interact with the Window
event, values = window.read()                   # Part 4 - Event loop or Window.read call
# Do something with the information gathered
print('Hello', values[0], "! Thanks for trying PySimpleGUI")
# Finish up by removing from the screen
window.close()                                  # Part 5 - Close the Window

3.实际代码

        对于很多函数不懂的,可以查看人家的视频or官方文档!如下是一些关键组件、操作等

        sg.Window、Button、Input、Text、FrameColumn、Table、Stretch(用于布局中组件横向对齐)、以及window.bind绑定事件

        ①组件内容等参数更新:一般采用window[key].update(),查看源码知道window[key].update()等同于window.FindElement(key).update(),推荐前者。

        ②若想组件跟随窗口自适应变化,那么sg.Frame和sg.Column组件更好,其他组件需要监控窗口尺寸变化,再update组件尺寸。可以在column和frame中包含其他组件!

        ③event, values = window.read(),其中event为组件中的事件名称(如有key参数则为key),values为组件中的数值内容(只是组件级,像menu中按钮对应内容无法获取到)

import PySimpleGUI as sg

def create_bar_window(main_window):
    layout = [
        [sg.In(key="-barIN-")],
        [sg.Button("更改", key="-barUpdate-")],
    ]
    bar_window = sg.Window("更新主窗口内容", layout, finalize=True)
    # main_window.hide()
    while True:
        bar_event, bar_values = bar_window.read()
        if bar_event == sg.WIN_CLOSED:
            bar_window.close()
            break
        if bar_event == "-barUpdate-":
            print(bar_event, bar_values)
            main_window["-main_text-"].Update(value=bar_values["-barIN-"])
    # main_window.un_hide()
    bar_window.close()

def create_main_window():
    menu_def = [
        ["文件", ["打开::open", "导出::save", "关闭图像::close"]], 
        ["要素", ["一键生成::one",]],
    ]

    layout = [
        [sg.Menu(menu_def)],
        [sg.Text("I'm leilei", key="-main_text-")],
    ]

    window = sg.Window("操作", layout, size=(400,300), resizable=True, finalize=True)
    # window.maximize()

    while True:
        event, values = window.read()
        print(event, 111)
        if event == sg.WIN_CLOSED:
            # print(sg.WIN_CLOSED, 555)
            break
        if event == "打开::open":
            img_filename = sg.popup_get_file('选择输入图片', no_window=True, file_types=(("图片类型", "*.png;*.jpg"),))
            print(img_filename)
        elif event == "导出::save":
            save_img_filename = sg.popup_get_file("选择保存图片", no_window=True, save_as=True, file_types=(("图片类型", "*.png;*.jpg"),))
            print(save_img_filename)
            is_ok = sg.popup_ok_cancel()
            print(is_ok)
        elif event == "关闭图像::close":
            print(window["关闭图像::close"])
        if event == "一键生成::one":
            create_bar_window(window)

    window.close()

if __name__=="__main__":
    create_main_window()

4.界面

 

另外的实现的一个小例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值