Python是一种面向对象的高级动态编程语言,相比于其它如C/C++语言,具有上手快、代码少、开发效率高的特点,Qt是跨平台的C++图形用户界面应用程序开发框架,是当前主流的GUI开发工具之一,其在Python下的绑定是PyQt库。使用“Python+PyQt”架构编写应用软件,可以做到在兼顾软件运行效率的前提下,大大节省时间成本,加快项目的开发进度。

图标字体库(Font Awesome字体库)提供了一套漂亮、可缩放的矢量图标,对于这些图标可使用CSS所提供的所有特性对它们进行更改,包括:大小、颜色、阴影或者其它任何支持的效果。在Python语言中,使用PyQt界面库搭配图标字体库,可以作出非常炫酷的界面程序。

下面给出一个在PyQt界面库中,使用图标字体库开发的一种通用的无边框导航软件界面示例程序,这种导航式界面在嵌入式程序中使用的比较多,是一种比较常见的简单的软件界面设计风格。

示例介绍

软件运行界面如下图所示:

在主界面上,上面部分是导航条区域,包括了软件图标(兼顾返回功能)、标题及关闭按钮,下面部分是主操作区域,初始界面包括六个按钮,点击每个按钮可进入不同的操作页面,如点击“温度监控”按钮,则切换到温度监控页面,在这个页面中可根据实际情况作具体的界面布局,如下图所示:

同时,软件左上角图标区域的图标也作了改变,可点击该区域图标返回到初始界面。

此外,拖动导航条区域或六个按钮之间的空白区域,可以拖动整个窗口到新的位置。

编程分析

对于上面软件界面的实现,主要涉及到的难点包括:

(1) 如何将字体设置或者转换为图标?

(2) 如何在无边框情况下拖动窗体?

(3) 如何对软件界面进行美化?

对于上面的问题,可以单独设计一个负责应用程序辅助管理的继承于QObject的类MgrHelper,对于本例,主要用于实现图标字体的管理、软件窗口的拖动管理等任务。在美化方面,可使用QSS(Qt Style Sheets)即Qt样式表对界面元素进行外观美化。

可使用设计师先设计窗口的外观框架,将其转换为py文件,在主类中进行调用并作美化及相应的各种槽函数实现。下面分别进行介绍。

使用设计师设计软件界面

在Python中使用设计师设计软件界面的详细操作步骤可参考前面的文章:

对于本例,设计完成后界面如下图所示:

界面中涉及到的所有界面对象元素名称、布局及相互之间的关系如下图所示:

其中,上部的导航条区域是一个QWidget,包含两个QPushButton和一个QLabel,下面主窗口区域是一个QStackedWidget,包含7个页面,第1个页面为主操作页面,后面6个为每个操作对应的具体页面。上下两部分区域采用垂直布局。

在设计师中完成界面设计后,保存该界面文件为“Main.ui”。在PyCharm开发环境中,选中这个文件,在右键菜单中选择“PyQt4-->PyUIC”将其转换为Python能够识别的文件“Ui_Main.py”。

辅助管理助手类MgrHelper的实现代码

辅助类MgrHelper主要实现图标字体的管理、软件窗口的拖动等任务,其实现代码如下图所示:

其主要代码解释如下:

(1)第16行,定义一个类的静态变量self,在主类中调用时,未定义该类的实例,直接使用了该类的相关函数,所以定义了该变量。

(2)第17-24行,初始化函数,装载图标字体库,安装事件过滤器,在事件过滤函数中实现窗口的拖动功能。

(3)第26-30行,定义一个类的静态函数,返回当前实例对象。

(4)第32-35行,根据要设置的图标对应的charCode及字体大小参数,对控件设置字体图标。

(5)第37-47行,对某个字体图标返回它的图像,可设置这个图标的字体大小、颜色及图标尺寸大小。

(6)第49-60行,在事件过滤函数中实现窗体的拖动功能。

主窗口类实现代码

主窗口类MyWindow主要实现窗口字体图标加载、美化及相应槽函数的实现,主要代码框架如下图所示:

其主要代码解释如下:

(1)第63-67行,类初始化代码,加载设计师界面文件。

(2)第69-74行,常量初始化函数。

(3)第76-122行,界面初始化函数,实现字体图标加载、美化,随后介绍。

(4)第123-128行,当点主操作页面的每个操作按钮时,切换到对应的具体操作界面中并修改软件标题。

(5)第130-131行,当点击导航条区域右上角退出按钮时退出程序。

(6)第133-138行,当点击导航条区域左上角返回按钮时,返回到主操作页面,并改变按钮的图标样式。

其中,实现字体图标加载、美化的initUI函数具体代码如下:

其主要代码解释如下:

(1)第78行,设置该窗口为无边框样式。

(2)第79行,为该类增加属性“canMove”,并设置其值为True,用于在事件过滤函数中判断该窗口是否可移动。

(3)第87-88行,设置导航条区域左边和右边两个按钮的字体图标。

(4)第91-99行,使用QSS样式表对顶部导航区域进行美化,包括颜色、字体大小等设置。

(5)第101-122行,为主操作界面上的每个按钮加载字体图标并关联槽函数。

(6)第124-125行,为导航条区域左边和右边两个按钮关联槽函数。

完整的测试代码

对于本例,完整测试代码如下图所示:

代码比较简单,这儿不作详细解释了,运行程序后,就会出现本文开始的提到的运行界面图。

总结

在Python+PyQt架构下使用图标字体库,对于如何实现无边框通用导航软件界面,本例给出了具体设计步骤及详细实现代码。这是一个通用的软件界面布局框架,在这个基础上可以很容易的进行扩展,开发出满足自己特定项目需要的软件界面。

如果你觉得这篇文章对你有用的话,关注+收藏+点赞吧。

python 图标字体_Python+PyQt:使用图标字体打造无边框通用导航界面相关推荐

  1. python系统字体_Python matplotlib修改默认字体的操作

    matplotlib库作为Python常用的数据可视化库,默认字体居然不支持中文字体,必须得吐槽一下~ 闲言少叙,开始正文 方法1:在plot中指定prop参数 使用matplotlib.font_m ...

  2. python显示汉字_python如何显示中文字体

    python如何显示中文字体? 在这里,你可以选择2种不同的解决方法 方法一:定义声明好编码格式 首先你要做的,是在打开写入文件时,声明encoding编码put_in = open(becopyed ...

  3. python如何调字体_python中文怎么设置字体?

    ahD少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 python中文字体设置步骤:ahD少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 1.回到我们的id ...

  4. pythonidle如何调字体_python IDLE 背景以及字体的修改

    为了保护眼睛,决定把白色背景换掉: 1 首先,在已经下载好的Python文件目录下,找到config-highlight.def文件,我的是在H:\python\python3**\Lib\idlel ...

  5. python右下角弹窗_python+pyqt实现右下角弹出框

    本文实例为大家分享了pyqt实现右下角弹出框的具体代码,供大家参考,具体内容如下 构造函数中: self.desktop=QDesktopWidget() self.move((self.deskto ...

  6. python实现新闻网站_Python 教你 4 行代码开发新闻网站通用爬虫

    ​ GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的 HTML, 输出正文内容.标题.作者.发布时间.正文中的图片地址和正文所在的标签源代码.GNE ...

  7. css 字体字体图标_CSS基础知识:了解字体

    css 字体字体图标 In this tutorial, we'll be learning about working with fonts in CSS! 在本教程中,我们将学习有关在CSS中使用 ...

  8. 控制元素显示和隐藏的方式及区别、内容溢出处理(区域滚动)、透明性、字体图标、常见字体、自定义字体设计、网站图标、CSS代码分析

    元素的显示与隐藏: 常见控制元素的显示和隐藏的属性有display.visibility.overflow,需要清楚的理解三者之间的区别. display显示: 当值为none时为销毁对象,不保留原位 ...

  9. JAVASCRIPT---CSS字体、文本、图标样式

    1.文本属性 文本属性-概览 color 为字体指定颜色 font-style 用于打开和关闭斜体文本 font-weight 为字体设置粗细程度 font-size 为文字指定大小 font-fam ...

最新文章

  1. java堆与非堆的一些研究_堆和堆傻傻分不清?一文告诉你 Java 集合中「堆」的最佳打开方式...
  2. Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透
  3. git 回退远端master分支版本
  4. java源程序可以有几个主类_Java源程序是由类定义组成的,每个程序可以定义若干个类,但只有一个类是主类。_学小易找答案...
  5. 从飞鸽传书口水仗想到的
  6. 计算机二级ms office知识点讲解,全国计算机二级MSOffice复习知识点
  7. 计算机网络相关的知识,计算机网络相关知识整理
  8. Check Point截获JavaScript文件隐形攻击
  9. FTP文件传输工具(三)
  10. 什么是0day漏洞?
  11. DIV 内容上下居中
  12. HTTP代理的代理形式
  13. DP转HDMI/VGA拓展坞方案|CS5262 DP转HDMI+VGA扩展坞设计|CS5262应用电路
  14. Java爬取英雄联盟官网,全英雄皮肤背景图片
  15. 计算机控制键盘,键盘装置及其计算机控制系统的制作方法
  16. 程序员:不要自称码农
  17. Spine动画显示错乱问题
  18. IBM POWER750硬盘背板介绍和如何配置分区
  19. MATLAB:线条属性
  20. 翻译:《Beginning HTML with CSS and XHTML》序

热门文章

  1. mt6735 [Audio Common]如何修改拨号按键音量大小
  2. 求1-100之间所有的质数的和
  3. Jmeter接口测试——配置全局token
  4. 计算机专业实验课,教你如何上好计算机课程的实验课
  5. Nginx之——Nginx+keepalived双机热备(主从模式)
  6. unity3d 重要类+方法 。。。再来一遍吧。。。
  7. 商品下单未支付,如何取消订单?
  8. Orangepi3-lts 编译Qt源码
  9. 去哪儿(社招)测开面经-机票业务线
  10. JS逆向加解密——python 实现AES加解密