虽然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各个原生组件运用的理解。

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

python qt 拖拽组件使用方法_Python QT组件库qtwidgets的使用相关推荐

  1. qt 拖拽 修改大小(二)

    最近项目需要实现windows下橡皮筋的效果,所以对此做了一些了解,特此记录. 首先windows系统是支持橡皮筋效果的,需要使用win32方 法:SystemParametersInfo(SPI_S ...

  2. html js点击字图片下拉,JavaScript实现文字与图片拖拽效果的方法

    本文实例讲述了JavaScript实现文字与图片拖拽效果的方法.分享给大家供大家参考.具体实现方法如下: JavaScript实现文字与图片的拖拽效果 *{padding:0;margin:0;} . ...

  3. VB 窗体实现文件拖拽获取路径方法

    Private Sub Form_Load()     Form1.OLEDropMode = 1 End Sub Private Sub Form_OLEDragDrop(Data As DataO ...

  4. qt 拖拽 修改大小

    写次篇文章之前,qt窗口的放大缩小和拖拽我都是通过setGeometry方法实现的,但是作为windows程序,windows支持橡 皮筋式(拖拽时有一个虚框)拖拽和拉伸.通过setGeometry方 ...

  5. php可视化布局拖拽,GitHub - hisiphp/Vue-Layout: 基于UI组件的Vue可视化布局工具 | Vue Visualization Layout Tool...

    Vue-Layout 演示 使用 效果 源码结构 ├─App.vue ├─main.js ├─utils | ├─guid.js //返回一个唯一标识符,组件被拖入后的id就是调用此方法获得 | ├─ ...

  6. python鼠标拖拽功能_selenium鼠标移动、拖拽、双击、长按等操作

    selenium鼠标操作靠的是ActionChains(行为链)类,前面的文章我们已经介绍过,详情可以看ActionChains类,selenium的鼠标操作就不一一举例了,本节把鼠标移动.拖拽.双击 ...

  7. 表格拖拽、树状拖拽的各种方法

    一.简单的表格拖拽 1.sortablejs 地址:https://www.itxst.com/sortablejs/neuinffi.html 配置项: http://www.sortablejs. ...

  8. Qt 拖拽 动态 垃圾箱

    前些天看了Qt的拖拽,觉得Qt的拖拽还是蛮灵活:但widgets在移动端类似的app应用场景下,确实显得有一些笨拙:但同时它功能强大,灵活性非常高. 我在这里实现的是一个类似于android手机卸载软 ...

  9. python可视化拖拽平台_PythonEditor可视化拼插编辑器:编程不用写代码,拖拖拽拽就可以!...

    <新一代人工智能发展规划>明确指出人工智能成为国际竞争的新焦点. 应逐步全民智能教育项目, 在中小学阶段设置人工智能相关课程, 逐步推广编程教育, 鼓励社会力量参与寓教于乐的编程教学软件. ...

最新文章

  1. P114、面试题17:合并两个排序的链表
  2. 学习 TList 类的实现[5]
  3. dns组件能够删除后恢复
  4. org/eclipse/jetty/server/Handler : Unsupported major.minor version 52.0
  5. 思科路由器IKEV2 L2L***预共享密码认证最简化配置
  6. 用了HTTPS,没想到还是被监控了!
  7. python可以做什么-Python是什么?用Python可以做什么?
  8. C++11实现模板手柄:委托构造函数、defaultkeyword分析
  9. 6种展示代码的绝佳方式
  10. caxa线切割怎样画链轮_在CAXA中怎么画链轮啊?
  11. 【23】数据可视化:基于 Echarts + Python 动态实时大屏范例 - Redis 数据源
  12. 华为交换机 查ip冲突_华为交换机根据ip查端口号
  13. Mob 秒验 实测评
  14. hdu3911 Black And White (线段树/区间合并)
  15. Spark深入解析(三):Spark基础解析之Spark环境搭建(不同模式)
  16. 纽约大学工程学院计算机工程硕士,纽约大学New York University (NYU) MS Computer Engineering 计算机工程硕士...
  17. 7个你绝对没用过的超强搜索引擎
  18. 通达信V6.1概念板块分类文件格式分析
  19. 天载配资策略指数能否创新高
  20. 利用串口网络助手上传数据、图片到OneNet平台以及获取数据(HTTP)

热门文章

  1. MP实战系列(十七)之乐观锁插件
  2. cell 各自的高度不同的时候
  3. 技巧:使用User Control做HTML生成
  4. 升级nginx,查看已经安装的模块,并隐藏或者修改版本号
  5. Oracle Buffer Cache的keep、recycle、default pool概念图解
  6. C# 截取图片的方法
  7. 2010数据库SQL Server 盘点
  8. “AS3.0高级动画编程”学习:第二章转向行为(下)
  9. 为什么我要重新开始数据科学
  10. leetcode 1035. 不相交的线(dp)