Python QT组件库qtwidgets的使用


Posted in Python onNovember 02, 2020

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

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

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

Python QT组件库qtwidgets的使用

安装

直接使用 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()

运行后的效果如下所示:

Python QT组件库qtwidgets的使用

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

如果我们要基于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提供的密码输入框的效果:

Python QT组件库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()

Python QT组件库qtwidgets的使用

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

  • 在渐变器上双击可以添加标记点,其颜色与右边的颜色一致;
  • 拖动标记点,可以改变渐变色的范围和位置;
  • 右键单击新建的标记点,可以编辑标记点的颜色;
  • 双击新建的标记点,可以删除此标记点。

下面,我们来演示一下:

Python QT组件库qtwidgets的使用

调色板

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()

其运行效果为:

Python QT组件库qtwidgets的使用

最后

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

Python QT组件库qtwidgets的使用

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

  文章版权所有:州的先生博客,转载必须保留出处及原文链接

  原文地址:https://zmister.com/archives/1594.html

以上就是Python QT组件库qtwidgets的使用的详细内容,更多关于Python qtwidgets库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现遍历数据库并获取key的值
May 17 Python
python实现报表自动化详解
Nov 16 Python
Python实现的字典值比较功能示例
Jan 08 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 Python
Python 列表反转显示的四种方法
Nov 16 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 Python
python利用opencv保存、播放视频
Nov 02 #Python
python获得命令行输入的参数的两种方式
Nov 02 #Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 #Python
python获取命令行参数实例方法讲解
Nov 02 #Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 #Python
详解tensorflow之过拟合问题实战
Nov 01 #Python
python cookie反爬处理的实现
Nov 01 #Python
You might like
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
js实现纯前端的图片预览
2016/04/27 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
深入理解Node.js中的进程管理
2017/03/13 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python写入数据到MP3文件中的方法
2015/07/10 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python3数字求和的实例
2019/02/19 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
实习求职信
2013/12/01 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
护士毕业实习感言
2014/03/05 职场文书
社区居务公开实施方案
2014/03/27 职场文书
承租经营合作者协议书
2014/10/01 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis