Python+PyQt架构:实现一个简单的小工具之颜色拾取器

liftword5个月前 (12-12)技术文章61

对于基于Python+PyQt的框架结构的程序开发,前面已经讲了很多小例子了,有兴趣的小伙伴们可以翻看下前面的文章。

总体来说,实现相同的功能,相比于其它如C/C++等编程语言,确实简单太多了。

下面,再给出一个小例子,使用PyQt5界面库,在Python3上来实现一个简单的颜色拾取器的小工具,下面看看具体的实现过程吧。

1、实例说明

本例运行界面如下图所示,实现的功能是,实时捕捉当前鼠标所在位置的颜色并进行显示,显示结果包括颜色指示、颜色的RGB值、颜色的CSS值及当前鼠标的坐标值等信息。



2、实现思路

可考虑在定时器超时事件中每隔一段时间(如20ms)取一次当前鼠标所在的位置的颜色信息,对该颜色值进行解析并分别显示其RGB值和CSS样式的值。

在PyQt中进行编程实现时,需要考虑以下两个问题:

  • 如何取当前鼠标的位置信息?
  • 如何获取当前位置的颜色值并将其分解为RGB值和CSS值?

对于第一个问题,可使用PyQt类中的QCusor类的pos()函数实时获取当前的鼠标位置信息。

对于第二个问题,可使用QScreen类的grabWindow()函数,将当前鼠标所在区域存储为QPixmap类型的画布里面,然后再使用toImage()函数将其转化为图像,有了图像信息后,就可获取该图像上任意像素点的颜色信息(QColor类型)了。最后使用QColor类的red()、green()、blue()函数分别获取其RGB值即可。对于颜色的CSS值显示,直接将RGB值转换为16进制显示即可。

3、核心代码实现

在定时器超时槽函数里面实现该软件的具体功能,其代码(不足20行)如下图所示:



代码简要解释如下:

(1)第48-50行,使用QCusor类的pos()函数获取当前的鼠标位置信息x、y并显示。

(2)第52-56行,使用QScreen类的grabWindow()函数,将当前鼠标所在区域存储到QPixmap类型的pixmap变量里面,使用toImage()函数将其转化为图像,然后使用pixel()函数获取该图像上(0,0)像素点的颜色信息,最后使用QColor类的red()、green()、blue()函数分别获取其RGB颜色的分量值。

(3)第58-60行,将RGB颜色进行显示,并在label控件上使用样式表设置其背景色进行实时指示当前鼠标所在位置的颜色信息。

(4)第62-64行,将R、G、B颜色值转换为16进制,显示其CSS值信息。

4、完整代码实现

整个工程除了上面的核心代码实现外,还包括界面的布局、定时器创建、槽函数关联等内容,程序的完整实现代码如下图所示:



程序主窗口基类为QWidget类,代码简要解释如下:

(1)第9-14行,类初始化函数,调用initUI函数并创建定时器、设置槽函数关联及启动定时器等。

(2)第16-40行,具体的界面设计函数,包括控件的创建/布局、窗口的居中设置、标题、图标设置等。

(3)第61-65行,创建窗口并显示。

5、总结

总体来说,这个例子界面比较简单,代码量比较少,也比较好理解,运行上面的程序后,即可出现前面的软件界面,当移动鼠标时,可在界面上实时显示当前鼠标位置的颜色信息。

本文实现颜色拾取器的小工具,仅仅用了不到70行的代码,试想一下,如果你用纯粹的C++语言来实现相同的功能,将需要多少代码量呢?所以,如果你做软件界面开发的话,Python+PyQt的框架结构真的是一个不错的选择。


本文由编码那些事原创,请关注+转发+收藏+点赞,带你一起长知识!

相关文章

diagrams:让您可以用 Python 代码绘制云系统架构

diagrams即代码。diagrams让您可以用 Python 代码绘制云系统架构。它的诞生是为了在没有任何设计工具的情况下对新的系统架构设计进行原型设计。您还可以描述或可视化现有的系统架构。目前,...

如何搭建一个Python Django项目:从零开始的详细指南

Django是一个功能强大的Python Web开发框架,适合于各种Web应用开发,小到博客系统大到复杂的企业级应用都可以使用Django进行开发。在本篇博客中,我们将展示如何从零开始构建一个完整的D...

通过Python实现内网穿透的几种方式?

所谓的内网穿透,其实就是一种将私有网络与外部网络之间来建立连接的一种技术,主要的作用就是将内部网络中的服务暴露到外部网络中进行访问,或者是在外部网络中使得用户能够访问到内部网络中的资源,通过这种方式来...