PyQt是Qt界面库在Python下的绑定,为在Python语言下编写GUI界面程序提供了极大的便利。对于界面程序的设计,可以使用纯代码构建,也可以借助于其提供的设计师(Qt Designer)工具来构建。
上面一篇文章给出了使用设计师编写界面程序的入门例子,详细请参考:使用设计师编写界面程序入门示例
对于同样的例子,下面再给出在Python语言中使用PyQt界面库,不借助于设计师工具,仅仅通过纯代码方式实现的过程。
例子说明
还是先对这个例子说明一下,其运行界面如下图所示,包括了常用软件界面的必备要素:菜单栏、工具栏、状态栏及主窗口显示区域,其中,主窗口显示区域以左一右二的形式分为了三个显示部分。
工具栏的显示样式可通过选项菜单下的"工具栏样式"设置为"仅显示图标"或"显示图标和文字"两种样式。另外,通过菜单或点击工具栏上窗口视图的下拉菜单可设置右面两个窗口的显示或隐藏状态,显示区域会自动进行布局。
纯代码编程实现思路
相对于使用设计师工具实现界面,纯代码编写的方式,其主要代码是在自定义窗口类的初始化中定义界面中的各部分元素及定义适当的布局,然后实现信号与槽函数的关联,最后完成槽函数具体功能的编程。
定义一个MainWindow,该类继承自QMainWindow类,其初始化代码的实现过程基本上同在设计师中类似,主要包括下面几个环节:创建动作(actions)、根据动作依次创建菜单栏、工具栏、状态栏等、创建主显示区域、最后设置整个界面的诸如大小、标题等辅助信息。代码如下图所示:
下面对每个部分依次进行说明。
创建动作(Action)的实现代码
菜单栏、工具栏上的大部分功能的实现都与动作相关,使用代码创建每个动作,并设置其图标、名称、快捷键、提示、是否可选、是否选中、槽函数等信息。其实现代码如下图所示:
创建菜单栏的实现代码
本例菜单栏中包括文件菜单和选项菜单,前者包括了打开、关闭和退出三个子菜单,后者包括工具栏样式和窗口视图两个子菜单。代码如下图所示:
创建工具栏的实现代码
本例工具栏上分别添加打开、保存、退出及一个带下拉菜单的按钮,实现代码如下图所示:
创建状态栏的实现代码
本例状态栏比较简单,只在状态栏中添加一个QLabel控件作一个简单的信息显示即可。代码如下图所示:
创建主显示区域的实现代码
本例中,主显示区域分为左一右二的三个窗口,创建一个水平的主分割条、一个垂直的右侧分割条及三个窗口。为简单起见,本例使用三个"Plain Text Edit"控件作为显示窗口。
另外,设置主分割条左右两边窗口的比例为1:2,并将主分割条设置为当前窗口的中心部件,QMainWindow类会自动对当前窗口布局。
实现代码如下图所示:
信号与槽函数的关联及槽函数的实现代码
本例中主要实现菜单及工具栏中的两个信号与槽函数的关联,分别为工具栏样式设置及右侧两个窗口的显示、隐藏设置,都为菜单项的triggered信号,其关联方式与槽函数的具体实现代码如下图所示:
在上面代码菜单项的triggered信号中,通过发送的当前点击项的text函数判断是点击了哪个菜单项,进而进行正确的设置。
至此,完成了整个界面类MainWindow的代码实现。
完整的测试代码
程序的完整测试代码同上篇文章相同,如下图所示:
程序运行后,即可出现本文开头的提到的界面运行图示。
使用纯代码方式和设计师方式编写界面的比较
无论是使用纯代码方式,还是使用设计师方式编写界面程序,都可以实现我们想要的功能。但使用设计师方式,更直观、更方便些,因此个人建议可使用设计师完成界面的大部分设计工作,在代码中只作少量的界面补充,而将精力集中在程序主要功能的实现上,可能不失为一种较好的方法。
如果你觉得这篇文章对你有用的话,抖抖小手点个赞吧。