PySimpleGUI | 用Python玩转GUI开发,为什么不能简单一点!

2020-12-07 10:15:47 浏览数 (1)

本文为Python GUI开发实战系列第一篇!

大家好,在之前的文章中我们说过如何制作一个NBA爬虫GUI,其中涉及最重要的部分讲解就是图形用户界面(Graphical User Interface)。

GUI可以说是玩计算机必备的一项技能。作为近几年非常火热的Python语言中,它同样有大量的热门GUI图像界面框架,比如wxpythontkinterPyQt等。

在本系列中我们将介绍Python中另外一个GUI库,比较新兴的同时又是可以说是非常非常简便制作的包PySimpleGUI如果你想用十几行代码可创建各种不同的跨平台GUI、几分钟时间编写代码来制作图形可视化界面,这个库一定是必然选择。

在基础篇本文将分为以下两个部分讲解:

1、PySimpleGUI介绍

2、PySimpleGUI基本使用

项目主要涉及的Python模块:

  • PySimpleGUI

流程图如下,本次介绍分为两方面进行讲解

PySimpleGUI介绍

1、什么是PySimpleGUI

PySimpleGUI库是是2018年发布的个人开源维护项目,是基于TkinterRemiwxpythonPyQt这些模块的,其中Remi模块是将应用程序的界面用HTML的形式来展现,所以这个包有个亮点就是你可以输入相应的代码将其转变网页形式展示,而其余包则都是用来做图形界面的。

其中,PyQtwxpython目前还在初步阶段还不能使用。作为一个新兴的个人维护项目,有BUG是正常,所以这个包会有反馈的更新的功能。

2、为什么选择它

很多人会有这个问题。先说说它的特点吧,作为一个集合了各大潮流的GUI模块的包,其最重要的特色就是代码量少门槛低。换句话说,在所有图形界面框架中,这个包是最具Pythonic的。你可以不需要用类与对象去写代码,去创建用户界面。

因为它已经包含了绝大多数原本需要用户界面构建编写的函数,不仅如此,它还具有Auto-packer技术,可以自动创建界面,读者不需要像tkinter那样使用布局管理器---GIRD。

3、构建步骤

构建GUI界面步骤有4步:

Import

Longrightarrow

Create some widgets

Longrightarrow

Create the window

Longrightarrow

Create the event loop

下面进行仔细讲解:首先,先引用包,如果没下载好的包可以用一下命令在命令框中输入

代码语言:javascript复制
pip install PySimpleGUI

如果是下载速度慢的可以用下面的清华镜像地址下载

代码语言:javascript复制
pip install PySimpleGUI -i https://pypi.tuna.tsinghua.edu.cn/simple

说明:默认条件下,PySimpleGUI的下载接口是Tkinter,如果你想要下载PyQt接口的话,可以执行以下命令

代码语言:javascript复制
pip install PySimpleGUIQt

两者的区别大同小异,各自都有缺点,下文会有提及。主要Qt端口的GUI对图像格式容纳得多,而Tkinter端口的功能相对较多。而后引用包

代码语言:javascript复制
import PySimpleGUI as sg

引用包后可以查看有哪些主题可以用,并切换到对应的主题颜色,这里选择一个比较暖的绿色

代码语言:javascript复制
#查看所有主题
sg.preview_all_look_and_feel_themes()
#切换主题
sg.change_look_and_feel("GreenMono")

接着就是构建GUI的基本框架,下面一步一步带你制作这样一个GUI页面?

首先创建一些小部件(widgets),这里举例创建两个文本部件和两个按钮

代码语言:javascript复制
text = sg.Text("输入你的早起的看法")
textinput = sg.InputText()
bt = sg.Button('确认')
cbt = sg.Button('取消')
layout = [[text, textinout],[bt, cbt]]

可以看到这里创建了一个Text小部件、一个人工输入的InputText、一个确认按钮和一个取消按钮。

需要注意的是,按行布局需要把对应行中的所有部件放到一个列表中,如上“确认”与“取消”按钮放在一个列表中,两个文本部件放到一个列表中,最后形成一个嵌套列表layout。

第三步就是创建一个窗体,这里不同于传统流行的GUI框架就是,它不用先创建一个窗体。窗体包括名字和你设定的部件

代码语言:javascript复制
window = sg.Window('欢迎来到早起Python', layout)

第四步就是创建一个循环来让GUI界面运行同时读取与获取输入输出值。这一步尤为重要,一个图形用户交互页面需要一个循环来运行同时等待使用者去做事件。一般,用一个“while“循环包含逻辑,break结束就可以完成这一步。

代码语言:javascript复制
while True:
    event, values = window.read()
    if event in (None, '取消'):
        break
    print(f'Event: {event}')   #这里的f是用来把事件按钮名称写出来
    print(str(values)) 
window.close()

总代码如下:

代码语言:javascript复制
import PySimpleGUI as sg
sg.change_look_and_feel("GreenMono")
text = sg.Text("输入你的早起的看法")
textinput = sg.InputText()
bt = sg.Button('确认')
cbt = sg.Button('取消')
layout = [[text, textinput],[bt, cbt]]
window = sg.Window('欢迎来到早起Python', layout)
while True:
    event, values = window.read()
    if event in (None, '取消'):
        break      #相当于关闭界面
    print(f'Event: {event}')
    print(str(values)) 
window.close()

效果如图所示?

4、如何使用部件

前文讲过PySimpleGUI包的特点就是代码简单,除了上述构建步骤能体现外,还有一点就是部件名都有别称,别称有的只有一个字母。先举一下常用到的小部件:Text、InputText、Button、Multiline、InputComb、Spin、Output

其中中widgets叫做element或者Element,比如按钮、窗口、标签等都是属于element。除了以上讲过的部件外,读者可以自行尝试其它的。

接下来介绍widgets的部分简写,简写分为两类,一类是Python类型的间写,也即在代码中利用它的形式。另一种就是返回参数对象的Python函数定义的默认值。有一下部分例子:

代码语言:javascript复制
T = Text     Txt = Text

In = InputText     Input = InputText

Combo = InputComb     DropDown = InputComb

接着读者可能会问,输出结果可以放在GUI上吗?看的方便!答案是可以的,这里用到一个常见的消息框MsgBox,在代码中加入如下代码:

代码语言:javascript复制
sg.MsgBox(event, values) 

但是更高级的版本用这个函数就会报错说失效了,这里说明一下,2018年经过修改后,取消了这个“MsgBox”函数,将其加入到弹出窗口函数中,这里我们介绍下面的滚动窗口函数以便接下来的项目实战。

代码语言:javascript复制
sg.popup_scrolled(values,title='',size=())

其中values是你想显示的文本值,title是弹出窗口名字,size是窗口大小。

除了上述的部件外,做GUI的热爱着最喜欢的莫过于在图形交互界面放一张图片,先上代码:

代码语言:javascript复制
import PySimpleGUI as sg
sg.change_look_and_feel("GreenMono")
layout = [
            [sg.Image('保时捷.PNG')]
         ]
window = sg.Window('照片练习', layout,location=(50, 50))
while True:
    event, values = window.read()
    if event in (None):
        break      #相当于关闭界面
window.close()

图片效果如下:

看代码,按照GUI基本框架的使用,这里layout列表中用到了sg.Image这个函数,这是用来存储图片的。和Tkinter一样,默认端口的PySimpleGUI只有PNG, GIF, PPM/PGM这几类图片格式是支持。

如果你想显示JPG或者TIFF这类格式的话,你需要用到Pillow模块或者PTL模块进行转换,具体不做详细解释。

相反,PyQt端口的可以容纳的图片格式比默认端口的PySimpleGUI多得多。这也是Qt端口的好处。

以上便是PySimpleGUI的基础版教程。在下一篇的进阶讲解文章中将介绍如何搭建属于自己的游客照和简单的调用计算器视觉(cv)

0 人点赞