虽然Qt提供了不少现成的组件,但是在Python中使用PyQt5或PySide2进行图形界面程序开发的过程,还是免不了要根据自己的需求组合一些小部件以形成新的自定义组件。

最近州的先生在写一个桌面图形界面的登录密码框的过程中,发现了这样一个小巧的自定义组件库。

其目前提供了密码输入框组件、渐变组件、均衡器组件、调色板组件。

下面我们一起来看看它的效果。

安装

直接使用 pip 工具进行安装即可,命令如下:

pip install qtwidgets

密码输入框

在PyQt5和PySide2中,我们一般使用QLineEdit()小部件,通过设置它的EchoMode属性来让输入的文本显示星号而非明文,代码如下所示:

# encoding:utf-8

from PySide2 import QtWidgets

import sys

class Widget(QtWidgets.QWidget):

def __init__(self):

super().__init__()

self.setWindowTitle("州的先生-zmister.com")

self.pwd_input = QtWidgets.QLineEdit(self)

self.pwd_input.setEchoMode(QtWidgets.QLineEdit.Password)

def main():

app = QtWidgets.QApplication(sys.argv)

gui = Widget()

gui.show()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

运行后的效果如下所示:

在现代的登录界面中,默认输入密码为密文,然后通过一个按钮允许用户查看自己输入的密码,是一个很常见的功能。

如果我们要基于QLineEdit()组件来扩展的话,就得花很多时间和代码来实现。借助qtwidgets模块,咱们就可以少造一点轮子了。

from PySide2 import QtWidgets

from qtwidgets import PasswordEdit

import sys

class Widget(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.setWindowTitle("州的先生-zmister.com")

# self.pwd_input = QtWidgets.QLineEdit(self)

self.pwd_input = PasswordEdit()

self.setCentralWidget(self.pwd_input)

def main():

app = QtWidgets.QApplication(sys.argv)

gui = Widget()

gui.show()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

来看看使用qtwidgets提供的密码输入框的效果:

除了密码输入框,qtwidgets还提供了几个扩展的组件。

渐变组件

渐变组件Gradient()提供了方便的界面来设计应用程序中的线性渐变。只需创建对象的实例即可创建新的渐变器。

from PySide2 import QtWidgets

from qtwidgets import PasswordEdit,Gradient

import sys

class Widget(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.setWindowTitle("州的先生-zmister.com")

self.gradient = Gradient()

self.setCentralWidget(self.gradient)

def main():

app = QtWidgets.QApplication(sys.argv)

gui = Widget()

gui.show()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

默认的渐变颜色是从黑到白的。停止点使用一个红色框进行标记。渐变器组件创建之后,我们可以在图形界面上进行编辑:

  • 在渐变器上双击可以添加标记点,其颜色与右边的颜色一致;

  • 拖动标记点,可以改变渐变色的范围和位置;

  • 右键单击新建的标记点,可以编辑标记点的颜色;

  • 双击新建的标记点,可以删除此标记点。

下面,我们来演示一下:

调色板

qtwidgets提供了三种调色板,分别是:

  • 水平调色板PaletteHorizontal

  • 垂直调色板PaletteVertical

  • 网格调色板PaletteGrid

这三个调色板除了排列方式有所不同外,其他的使用方法都一样,都接受颜色列表参数,或预置的几个颜色族,都支持selected选择信号,下面我们来演示一下:

from PySide2 import QtWidgets

from qtwidgets import PasswordEdit,Gradient,PaletteGrid,PaletteHorizontal,PaletteVertical

import sys

class Widget(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.setWindowTitle("州的先生-zmister.com")

self.palette_1 = PaletteGrid('category10')

self.palette_2 = PaletteHorizontal('17undertones')

self.palette_3 = PaletteVertical(['#000003', '#160B39', '#410967', '#6A176E', '#932567', '#BA3655', '#DC5039', '#F2751A', '#FBA40A', '#F6D542', '#FCFEA4'])

self.palette_1.selected.connect(self.selected_color)

self.label = QtWidgets.QLabel("点击了:")

self.widget = QtWidgets.QWidget()

self.widget_layout = QtWidgets.QVBoxLayout()

self.widget.setLayout(self.widget_layout)

self.widget_layout.addWidget(self.palette_1)

self.widget_layout.addWidget(self.palette_2)

self.widget_layout.addWidget(self.palette_3)

self.widget_layout.addWidget(self.label)

self.setCentralWidget(self.widget)

def selected_color(self,value):

self.label.setText("点击了:{}".format(value))

def main():

app = QtWidgets.QApplication(sys.argv)

gui = Widget()

gui.show()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

其运行效果为:

最后

还有一个均衡器组件,用于动态可视化输出频率的变化,在这里就不演示了,有兴趣的小伙伴可以自己试一试。

除此之外,所有这些组件也都是基于Qt现有组件进行的封装,学有余力的小伙伴还可以查看一下它们的源码实现,以加深对Qt各个原生组件运用的理解。

?分享、点赞、在看,给个三连击呗!?

qt 按钮 gradient_少造轮子!推荐一个Qt的Python组件库相关推荐

  1. python 格式化工具_推荐一个小而美的 Python 格式化工具

    原标题:推荐一个小而美的 Python 格式化工具 代码可读性是评判代码质量的标准之一,有一个衡量代码质量的标准是 Martin 提出的 "WFT" 定律,即每分钟爆出 " ...

  2. 如何在uni-app中选择一个合适的UI组件库

    uni-app框架转眼已经发布了一年多,使用uni-app的开发者也是与日俱增.因为uni-app是一个跨端框架,所以我们大多使用它就是为了同时一套代码跨多端,选择uni-app 可以算是眼下一个比较 ...

  3. 推荐一个vue, angular的组件分享网站--轮子工厂

    造轮子还是找轮子,似乎一直是开发过程中总会碰到的问题.以学习为目的的造轮子还是好的,不仅是一个不错的学习过程,而且也可以和已有的组件比较一下,对技术理解也会提高.但是在实际的项目,还是建议尽量寻找优秀 ...

  4. 因为造轮子,我一个月就转正了

    往期热门文章: 1,<往期精选优秀博文都在这里了!> 2.面试 Google, 我失败了! 3.去掉烦人的 " ! = null " (判空语句) 4.干掉可恶的 &q ...

  5. Qt创建项目:手把手创建第一个Qt项目

    上一节介绍了QtCreator编辑器的页面长什么样子,以及都有哪些功能区,每个功能区都是用来做什么的.这一节我就手把手带大家创建一个Qt项目. 创建项目 点击新建按钮 创建项目有两个入口,一个是在欢迎 ...

  6. 推荐一个日历转换开源工具库,支持C#、Java、PHP等主流的语言

    更多开源项目请查看:一个专注推荐.Net开源项目的榜单 日历对我们来说,最熟悉的就是阳历和农历,在中国每年都有固定的节日.节气.中国特有传统节日,有些节日是固定的,但是节气这些都需要我们经过一定规则换 ...

  7. 用python画的炫酷图形_推荐一个炫酷Python 手绘图形库

    https://github.com/chenjiandongx/cutecharts 今天,给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts.和 Matplotlib . ...

  8. python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown

    本文介绍了一个用于操作TDengine的 Python ORM库.本文的预期读者是,需要使用Python语言操作TDengine数据库的开发人员. 什么是ORM? ORM就是对象关系映射(Object ...

  9. 前端架构之路:数据驱动型组件-HeyUI,一个新型的VUE组件库

    什么是数据驱动型组件? 其实,目前来说,也只有HEYUI组件库是这种方式的尝试者,这也是我在设计组件库的过程中,慢慢思考的成果. 所以,关于这一种定义,还没有人运用过. 当然,这也是HEYUI区别于其 ...

  10. 使用webpack4搭建一个基于Vue的组件库

    组内负责的几个项目都有一些一样的公共组件,所以就着手搭建了个公共组件开发脚手架,第一次开发 library,所以是参考着 iview 的配置来搭建的.记录如何使用webpack4搭建一个library ...

最新文章

  1. 让假图无所遁形,阿里篡改图像检测大赛集结号令打响
  2. LIVE 预告 | CVPR 2021 预讲 · 美团专场,覆盖实例分割,图像分割,表情识别,特征选择和对齐...
  3. fastclick:处理移动端click事件300毫秒延迟
  4. Go 定时器和断续器
  5. java md5 32位加密算法_java 32位md5加密类
  6. ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
  7. QTP中VBS脚本下FSO、WSH的应用(二)
  8. redis 分页_Redis排行榜的设计与实现
  9. 高收益债券与杠杆收购:中国机会
  10. Python 批量生成中文姓名(百家姓)
  11. 「leetcode」129. 求根到叶子节点数字之和【递归中隐藏着回溯】详解
  12. Spring 源码学习:day1
  13. 万年历插件软件测试,中华万年历app测试用例.xls
  14. 三种刷写LEDE等软路由固件的方法
  15. 微信小程序php签到功能,微信小程序签到功能
  16. 电脑病毒预防及常见中毒处理方式
  17. Android 鼠标样式修改
  18. 使用pgpool-ii 搭建postgresql 高可用、负载均衡架构
  19. Fedora 安装VBoxGuestAdditions
  20. Servlet学习记录3

热门文章

  1. 【动力学】基于matlab GUI汽车动力学分析系统【含Matlab源码 1050期】
  2. vue 请求嵌套_vue和jQuery嵌套实现异步ajax通信
  3. python自动化测试怎么提高效率_自动化测试更适合缺陷预防,而不是提高测试效率...
  4. deep-sort 代码阅读(https://github.com/nwojke/deep_sort)
  5. nosql第二章课后习题
  6. 计算机物联网软件工程,关于计算机物联网的应用分析
  7. python爬取妹子图片1_利用爬虫爬取清纯妹子图片
  8. Centos6.5安装tocmat7 配置以及优化
  9. “约女生图书馆一起自习”总结
  10. Java用WebSocket + tail命令实现Web实时日志