wxPython:一曲MFC的挽歌,理想主义的绝唱

wxPython:一曲MFC的挽歌,理想主义的绝唱
文章图片
作者|许向武出品|CSDN博客概述
MFC是我接触到的第一个界面库 , 当时的操作系统还是Windows95 。 在那个IT技术日新月异的年代 , 就像一个从荒蛮部落闯进文明社会的野人第一眼看见汽车那样 , 我对MFC充满了好奇和迷恋 。 尽管后来断断续续接触了WPF、Qt等GUI库 , 却始终对MFC情有独钟 , 以至于爱屋及乌 , 喜欢上了wxWidgets 。
wxWidgets和MFC的确太相似了 , 连命名习惯和架构都高度相似 。 事实上 , wxWidgets就是跨平台的MFC , 对各个平台的差异做了抽象 , 后端还是用各平台原生的API实现 。 这正是wxWidgets的优点:编译出来的程序发行包比较小 , 性能也相当优异 。
随着MFC的日渐式微 , Qt异军突起 , 目前已成为最强大 , 最受欢迎的跨平台GUI库之一 。 在Python生态圈里 , PyQt的用户群也远超wxPython 。 喜欢Qt的人认为这是技术竞争的结果 , 但我觉得这更像是开源理念和商业化思想的差异造成的 。
wxWidgets像是一个孤独的勇士 , 高举开源的大旗 , 试图以一己之力构建一个相互承认、相互尊重的理想社会;而Qt则更像是一个在商业资本驱使下不断扩张的帝国 , 它不满足于封装不同平台的API , 而是要创造出自己的API和框架 , 它不仅仅是UI , 而是囊括了APP开发用到的所有东西 , 包括网络、数据库、多媒体、蓝牙、NFC、脚本引擎等 。
缺少或拒绝商业化运作的支持 , wxWidgets的悲情结局早已是命中注定 。 如果不是因为Python的兴盛和wxPython的复兴 , wxWidgets也许早已经和MFC一样被遗忘在了角落里 。 不无夸张地说 , wxPython是以MFC为代表的一个时代的挽歌 , 更是一曲理想主义的绝唱 。
1.1组织架构
其实 , wxPython谈不上什么组织架构 , 因为桌面程序开发所用的类、控件、组件和常量几乎都被放到了顶级命名空间wx下面了 。 这样做看似杂乱无章 , 但用起来却是非常便捷 。 比如 , 导入必要的模块 , PyQt通常要这样写:
fromPyQt6.QtWidgetsimportQApplication,QWidget,QComboBox,QPushButton,QHBoxLayout,QVBoxLayout,QColorDialogfromPyQt6.QtGuiimportQIcon,QPainter,QPen,QColor,QPolygonfromPyQt6.QtCoreimportQt,QPointPyQt巨人般的体量限制了使用星号导入所有的模块 , 只能用什么导入什么 。 而wxPython只需要简短的一句话:
importwx再比如一些常量的写法 , wxPython同样简洁 , PyQt已经长到匪夷所思的程度了 。 比如左对齐和确定取消键 , wxPython这样写:
wx.ALIGN_LEFTwx.OK|wx.CANCELPyQt写出来几乎要占一整行:
Qt.AlignmentFlag.AlignLeftQMessageBox.StandardButton.Ok|QMessageBox.StandardButton.Cancel尽管wxPython也与时俱进地增加了一些诸如wx.xml、wx.svg之类地外围模块 , 但除了wx这个核心模块之外 , 我个人觉得只有wx.aui和wx.grid模块算是必要的扩展 。 如果想让界面更花哨点 , 那就要了解以下wx.adv、wx.ribbon这两个模块 , 纯python构建的控件库wx.lib也绝对值得一试 。 总之 , 站在我的应用领域看 , wxPython的组织架构如下图所示 。 根据使用频率的高低 , 我给各个模块标注了红黄绿蓝四种颜色 。
wxPython:一曲MFC的挽歌,理想主义的绝唱
文章图片
1.2安装
截至本文写作时 , wxPython的最新版本是4.1.1 。 Windows用户和macOS用户可以直接使用下面的命令安装 。
pipinstall-UwxPython由于Linux平台存在发行版之间的差异 , 必须使用相应的包管理器进行下载和安装 。 例如 , 在Ubuntu系统上可以尝试下面的安装命令 。
sudoapt-getinstallpython3-wxgtk4.0python3-wxgtk-webview4.0python3-wxgtk-media4.0快速体验