一个非常简单好用的Python图形界面库(PysimpleGUI)


Posted in Python onDecember 28, 2020

前一阵,我在为朋友编写一个源代码监控程序的时候,发现了一个 Python 领域非常简单好用的图形界面库。

说起图形界面库,你可能会想到 TkInter、PyQt、PyGUI 等流行的图形界面库,我也曾经尝试使用,一个很直观的感受就是,这太难用了。就去网上搜搜,看看有没有一些 demo,拿来改改,结果很少有,当时我就放弃了这些图形库的学习,转而使用了 vue+flask 的形式以浏览器网页作为程序界面,因为我会这个,即使实现起来稍微麻烦,但是也快。

那有朋友可能问了:一定要学习图形界面吗?

其实不一定,如果你写的程序都是自己用,或者配合其他程序员使用,那么直接命令行调用即可,完全不用学习图形界面?那什么时候要学呢?如果你要做游戏,或者你要为他人(非技术人员)编写软件工具,那么你就需要学习图形界面了。我是后者,偶尔受邀帮别人写点小工具,因此有个图形界面体验会好很多。

今天要说的这个库就是 PySimpleGUI,在 GitHub 仓库[1]有 5.1K 个 star,20 天前还有人提交代码,可以说非常火热了。

我看了官方文档,找了个 demo,花了 2 个小时的时间,写了 56 行代码,就搞定了一个具有图形界面的监控工具,如下:

要说 PysimpleGUI 最吸引我的地方,在于它有 200 多个示例程序,几乎覆盖了日常的开发需求,拿来稍作修改就可以用,着实方便。

PysimpleGUI 内部封装了 tkinter,Qt(pyside2),wxPython和 Remi,Remi 用于浏览器支持,因此你很容易将你的界面搬到浏览器中而无需修改代码。如下图:

一个非常简单好用的Python图形界面库(PysimpleGUI)

还有最吸引我的一点,就是足够简单,在几分钟内用几行代码就可以构建自定义 GUI 布局,对于初学者来说足够容易,对于高级用户来说足够强大。广泛的文档。有 100 多种内置颜色主题,200 多个示例程序[2],还经常更新。如果你玩 Raspberry Pi,也可以用这个库写界面,你说好用不好用。

通常一个 PySimpleGUI 程序包含 5 个部分,见下面代码的注释:

import PySimpleGUI as sg            # Part 1 - 导入库
 
# 定义窗口的内容
layout = [ [sg.Text("What's your name?")],   # Part 2 - 排版
      [sg.Input()],
      [sg.Button('Ok')] ]
 
# 创建窗口
window = sg.Window('Window Title', layout)   # Part 3 - 窗口定义
                        
# Display and interact with the Window
event, values = window.read()          # Part 4 - 开启主循环 window.read()
 
# 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 - 关闭窗口

执行上述代码,会得到一个如下图所示的程序:

一个非常简单好用的Python图形界面库(PysimpleGUI)

这仅仅是一个类似 hello world 的程序,PySimpleGUI 还可以做出更加强大的图形界面和游戏界面,

多个窗口

我看到许多新程序员都在挣扎的一件事是在他们选择的GUI工具包中打开多个窗口。 幸运的是,PySimpleGUI明确标明了如何执行此操作的说明。 实际上,他们有两种不同的“设计模式”来做这种事情。

为简便起见,我将仅展示如何执行两个活动窗口:

# -*- coding: utf-8 -*-
# https://www.jianshu.com/u/69f40328d4f0
# https://github.com/china-testing/python-api-tesing
# https://china-testing.github.io/
# support q group: 630011153 144081101
import PySimpleGUI as sg
 
# Create some widgets
ok_btn = sg.Button('Open Second Window')
cancel_btn = sg.Button('Cancel')
layout = [[ok_btn, cancel_btn]]
 
# Create the first Window
window = sg.Window('Window 1', layout)
 
win2_active = False
 
# Create the event loop
while True:
  event1, values1 = window.read(timeout=100)
 
  if event1 in (None, 'Cancel'):
    # User closed the Window or hit the Cancel button
    break
 
  if not win2_active and event1 == 'Open Second Window':
    win2_active = True
    layout2 = [[sg.Text('Window 2')],
          [sg.Button('Exit')]]
 
    window2 = sg.Window('Window 2', layout2)
 
  if win2_active:
    events2, values2 = window2.Read(timeout=100)
    if events2 is None or events2 == 'Exit':
      win2_active = False
      window2.close()
 
window.close()

参考资料

[1] GitHub 仓库: https://github.com/PySimpleGUI/PySimpleGUI

[2] 200 多个示例程序: https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms

到此这篇关于一个非常简单好用的Python图形界面库的文章就介绍到这了,更多相关Python 图形界面库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python的dict,set,list,tuple应用详解
Jul 24 Python
Python中的迭代器漫谈
Feb 03 Python
初步解析Python中的yield函数的用法
Apr 03 Python
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 Python
python函数超时自动退出的实操方法
Dec 28 #Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 #Python
python中str内置函数用法总结
Dec 27 #Python
python中温度单位转换的实例方法
Dec 27 #Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 #Python
Python 可视化神器Plotly详解
Dec 26 #Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 #Python
You might like
PHP STRING 陷阱原理说明
2010/07/24 PHP
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
python学习之编写查询ip程序
2016/02/27 Python
详解Python中for循环是如何工作的
2017/06/30 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
python语言中有算法吗
2020/06/16 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
重大事项社会稳定风险评估方案
2014/06/15 职场文书
教室标语大全
2014/06/21 职场文书
亮剑观后感
2015/06/05 职场文书
教师节联欢会主持词
2015/07/04 职场文书
Nginx限流和黑名单配置
2022/05/20 Servers