用Python创建你第一个GIS程序[2]:图形用户界面
前言:给程序创建一个可视化的操作界面是一个基本的需求,也是软件的三大组成部分之一。清晰明了的操作界面能帮助用户正确操作程序,同时也传递出设计者的开发理念和解决问题的方式。什么是 GUI?
GUI(Graphical User Interface),图形用户界面。是现代软件的三大组成部分。你打开软件首先看到的就是它,按钮、图标、下拉框、标注、文本框等等,这些元素组成了图形用户界面。而在“远古”时期的大部分软件和如今的部分软件,是没有图形用户界面的,而是各种原始的命令行窗口。
使用命令行窗口操作软件的学习成本高,不直观,大部分普通用户看了都会敬而远之。所以构建软件图形用户界面能帮助用户快速上手,提高效率和友好度。而提供一整套 GUI 开发工具、包或者模块就叫做 GUI 框架。GUI框架的选择
得益于 Python 语言的热度快速上升,较为平滑友好的学习曲线。到目前为止已经有许多支持 Python 平台的 GUI 框架。给了我们许多选择,这是一件好事,也是一件不好的事,特别是不了解这方面情况的人,会造成选择恐惧症。为了不让好事变成坏事,我们就来谈一谈如今 Python 平台的各种 GUI 框架!也为之后的程序搭建打下基础。1.PyQt和PySide
PyQt
第一个说的就是大名鼎鼎的 Qt。电脑桌面端开发的黄金年代已经逐渐远去,Qt 作为一员老将依然活跃于各种平台和设备,经久不衰。Qt 是使用 C++ 开发的跨平台应用库。使用 Qt开发的不仅有 WPS office、QGIS、Autodesk Maya、OBS、Google Earth 等等知名软件,甚至还有许多操作系统。而 PyQt 就是是 Qt 的 Python 语言版本的开发接口。需要注意的是,PyQt 的性能肯定是比不上原生 Qt 的,但也足够使用了,也没有人会选择使用 Python 去开发超高性能软件吧。PyQt5 是 Qt 的 v5 版本的对应实现,是目前最流行的版本。而最新版本是对应 Qt v6 版本的 PyQt6。Qt 是跨平台的,同样 PyQt 也是跨平台的。开发者可以在多个平台上构建程序,比如 Windows、Mac、Linux、iOS、Android 等。PyQt 包含了大约440个类型、超过6000个的函数和方法。功能强大同时兼具有灵活性,比如用户可以非常简单的设置各种窗口的显示方式:悬浮、隐藏、重排列等。给予程序高度的自定义和灵活性。同时提供了 QtDesigner(Qt设计器),允许用户在可视化的窗口以拖拽等方式直观的设计调整程序界面。
PyQt 在国内也能找到较为详细的中文教程,对想要入手学习但是英语捉急的朋友也是相当友好的。总的来说,PyQt 功能强大,是一个重型武器,能实现一个现代 GUI 的所有功能,同时使用 Qt 能比较容易的做出漂亮美观的程序(程序颜值很重要!)。但是功能强大的一个普遍负作用就是程序沉重、大,PyQt 也不例外。你可以在通过使用命令 “pip install pyqt5” 安装该 GUI 框架。
Developed By: Riverbank ComputingWebsite Link: https://riverbankcomputing.com/software/pyqt/introPySide
之前的 PyQt 是 Riverbank Computing 公司开发。而 PySide 是 Qt 公司自己开发的亲儿子。由于 PySide 推出时间晚于 PyQt,目前中文文档较为匮乏,使用人数也比不上。PySide 有三个版本:PySide 支持 Qt 4PySide2 支持 Qt 5PySide6 支持 Qt 6PySide2 是较为常用的版本。而在2020年12月,Qt 公司推出了最新的 PySide6,支持 Qt6 版本。只有 Python3.6 后的版本支持 PySide6。PySide 尽管起步较晚,但是作为亲儿子同时有 LGPL 协议的加持,可能会博得一些商业项目的青睐,未来很有可能超越 PyQt,当然只是有可能。2.wxPython
除了 PyQt,另外一个知名的第三方框架就是 wxPython。
wxPython 也是一个 Python 语言的 GUI 开发框架,作为 Python 的扩展模块实现,其内部封装的是 wxWidgets(C++ 语言开发的跨平台库)。wxPython 是跨平台的、开源、免费的,可用组件众多,借助这些组件,开发者可以快速创建完整、功能全面的用户界面,其应用也是相当广泛。使用 wxPython 制作的初始界面是系统原生界面,也就是说在没有任何美化的前提下,系统长什么样,程序的按钮、关闭键等等窗口和系统保持一致。(所以在Mac OS 下就很好看。)使用 wxPython 开发的知名程序有BitTorrent,Google Drive、GRASS GIS等。你可以在通过使用命令 “pip install wxpython” 安装该 GUI 框架。Developed By: Robin DunnWebsite Link: https://www.wxpython.org/Tutorial Link: https://www.youtube.com/watch?v=NMjV_HGLAQE3.Tkinter
在众多的 GUI 框架中,最简单的那就是 Tkinter,Python自带的标准库,对于 Python2 和 Python3 都有良好的适配版本。是一个跨平台、轻量的、不需要额外安装的 GUI 开发框架。
Tkinter 提供了最基本的 GUI 组件,最常用的有 Button(按钮)、Frame(框组件)、Label(标签)、Text(文本)、File Dialog(文件对话框)、Canvas(图形绘制组件)等,同时提供自带的额外扩展组件模块 ttk,完全能够满足小型简单项目的开发。这也是该篇文章的选择,使用 Python 开发 GUI 程序简单,不需要额外安装第三方包,避免了各种版本冲突等问题,能让我们将注意力放在程序的内部实现上。尽管 Tkinter 咋一看还不错,但是依然被很多人嫌弃,其中一个重要原因就是丑,连程序世界都不喜欢丑的,太惨了。但是有代码的地方就有无限的可能,再丑也能变身成功。第一种方式就是通过 Tkinter 自带的可调节选项来修改或者使用自带的 ttk 库中的组件;第二种方式最简单便捷:直接使用 Tkinter 样式库。但是要找到支持Python2.7 并且满意的样式库还是比较难的。最终我选择了 ttkthemes 这个库。效果如下:
在该教程的后面会出单独制作一篇美化教程,敬请期待!如果有朋友希望深入研究 Tkinter,推荐书籍《Python GUI Programming Cookbook》。
4 其他
上述三种 GUI 框架:复杂度:PyQt5>wxPython>Tkinter功能多样性:PyQt5>wxPython>Tkinter如果你喜欢折腾、有大把时间学习,想把 GUI 做的尽善尽美,不介意其庞大的体积的话,那么推荐 PyQt;如果你希望较快的构建一个功能完善,同时具有较强的扩展性和丰富的各类组件,又不希望程序臃肿的话,wxPython 是你的好伙伴。如果你希望极速构建一个程序又不介意界面的美丑(可以通过样式库美化,也很好看),上手快也不需要安装任何东西同时程序轻量小巧,那么一定得试试 Tkinter。当然 Python 平台还有很多 GUI 框架,比如Kivy、PyGUI、Pyforms、PyGTK等,这里就不做详细说明了。结束语
分享GIS,不止于Python。荟GIS精粹,关注我,带你飞!(长按扫码)欢迎交流点击留言