用Python创建你第一个GIS程序[2]:图形用户界面
前言:给程序创建一个可视化的操作界面是一个基本的需求,也是软件的三大组成部分之一。清晰明了的操作界面能帮助用户正确操作程序,同时也传递出设计者的开发理念和解决问题的方式。什么是 GUI?
![](http://n4.ikafan.com/assetsj/blank.gif)
GUI(Graphical User Interface),图形用户界面。是现代软件的三大组成部分。你打开软件首先看到的就是它,按钮、图标、下拉框、标注、文本框等等,这些元素组成了图形用户界面。而在“远古”时期的大部分软件和如今的部分软件,是没有图形用户界面的,而是各种原始的命令行窗口。
![](http://n4.ikafan.com/assetsj/blank.gif)
使用命令行窗口操作软件的学习成本高,不直观,大部分普通用户看了都会敬而远之。所以构建软件图形用户界面能帮助用户快速上手,提高效率和友好度。而提供一整套 GUI 开发工具、包或者模块就叫做 GUI 框架。GUI框架的选择
![](http://n4.ikafan.com/assetsj/blank.gif)
得益于 Python 语言的热度快速上升,较为平滑友好的学习曲线。到目前为止已经有许多支持 Python 平台的 GUI 框架。给了我们许多选择,这是一件好事,也是一件不好的事,特别是不了解这方面情况的人,会造成选择恐惧症。为了不让好事变成坏事,我们就来谈一谈如今 Python 平台的各种 GUI 框架!也为之后的程序搭建打下基础。1.PyQt和PySide
![](http://n4.ikafan.com/assetsj/blank.gif)
PyQt
![](http://n4.ikafan.com/assetsj/blank.gif)
第一个说的就是大名鼎鼎的 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设计器),允许用户在可视化的窗口以拖拽等方式直观的设计调整程序界面。
![](http://n4.ikafan.com/assetsj/blank.gif)
PyQt 在国内也能找到较为详细的中文教程,对想要入手学习但是英语捉急的朋友也是相当友好的。总的来说,PyQt 功能强大,是一个重型武器,能实现一个现代 GUI 的所有功能,同时使用 Qt 能比较容易的做出漂亮美观的程序(程序颜值很重要!)。但是功能强大的一个普遍负作用就是程序沉重、大,PyQt 也不例外。你可以在通过使用命令 “pip install pyqt5” 安装该 GUI 框架。
![](http://n4.ikafan.com/assetsj/blank.gif)
Developed By: Riverbank ComputingWebsite Link: https://riverbankcomputing.com/software/pyqt/introPySide
![](http://n4.ikafan.com/assetsj/blank.gif)
之前的 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
![](http://n4.ikafan.com/assetsj/blank.gif)
除了 PyQt,另外一个知名的第三方框架就是 wxPython。
![](http://n4.ikafan.com/assetsj/blank.gif)
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
![](http://n4.ikafan.com/assetsj/blank.gif)
在众多的 GUI 框架中,最简单的那就是 Tkinter,Python自带的标准库,对于 Python2 和 Python3 都有良好的适配版本。是一个跨平台、轻量的、不需要额外安装的 GUI 开发框架。
![](http://n4.ikafan.com/assetsj/blank.gif)
Tkinter 提供了最基本的 GUI 组件,最常用的有 Button(按钮)、Frame(框组件)、Label(标签)、Text(文本)、File Dialog(文件对话框)、Canvas(图形绘制组件)等,同时提供自带的额外扩展组件模块 ttk,完全能够满足小型简单项目的开发。这也是该篇文章的选择,使用 Python 开发 GUI 程序简单,不需要额外安装第三方包,避免了各种版本冲突等问题,能让我们将注意力放在程序的内部实现上。尽管 Tkinter 咋一看还不错,但是依然被很多人嫌弃,其中一个重要原因就是丑,连程序世界都不喜欢丑的,太惨了。但是有代码的地方就有无限的可能,再丑也能变身成功。第一种方式就是通过 Tkinter 自带的可调节选项来修改或者使用自带的 ttk 库中的组件;第二种方式最简单便捷:直接使用 Tkinter 样式库。但是要找到支持Python2.7 并且满意的样式库还是比较难的。最终我选择了 ttkthemes 这个库。效果如下:
![](http://n4.ikafan.com/assetsj/blank.gif)
在该教程的后面会出单独制作一篇美化教程,敬请期待!如果有朋友希望深入研究 Tkinter,推荐书籍《Python GUI Programming Cookbook》。
![](http://n4.ikafan.com/assetsj/blank.gif)
4 其他
![](http://n4.ikafan.com/assetsj/blank.gif)
上述三种 GUI 框架:复杂度:PyQt5>wxPython>Tkinter功能多样性:PyQt5>wxPython>Tkinter如果你喜欢折腾、有大把时间学习,想把 GUI 做的尽善尽美,不介意其庞大的体积的话,那么推荐 PyQt;如果你希望较快的构建一个功能完善,同时具有较强的扩展性和丰富的各类组件,又不希望程序臃肿的话,wxPython 是你的好伙伴。如果你希望极速构建一个程序又不介意界面的美丑(可以通过样式库美化,也很好看),上手快也不需要安装任何东西同时程序轻量小巧,那么一定得试试 Tkinter。当然 Python 平台还有很多 GUI 框架,比如Kivy、PyGUI、Pyforms、PyGTK等,这里就不做详细说明了。结束语
![](http://n4.ikafan.com/assetsj/blank.gif)
分享GIS,不止于Python。荟GIS精粹,关注我,带你飞!(长按扫码)欢迎交流点击留言