python qt 拖拽组件使用方法_Python QT组件库qtwidgets的使用

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

get与post区别

两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。POST - 向指定的资源提交要被处理的数据GET 方法 请注意,查询字符串(名称/…

java 实现 sql join_Sql 数据库 join 连接

sql里面有两个连接一个是union,另一个就是join他们两个的区别:union 连接的是行 是一行一行的连 而 join 连接的是列(字段) (他们俩的区别暂时就就知道这点)join连接的使用的前提:1.必须要有至少一个表(一个表可以用自连接)2.必须要有相关联的列(字段)&#xff…

开源与云计算

本文讲的是开源与云计算,【IT168 资讯】几年来我一直担心开源运动可能会遭受Kim Stanley Robinson在“Green Mars”中精辟论述的问题:“历史的浪潮比我们做得还要快。”创新者被抛在后面,他们曾经改变的世界拿着他们的主意向着意想不到的方向…

c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)...

我的安装环境: (1)vs2013(32位版) (vs2013只有32位的 没有64位的,但是它可以编译出64位的程序) ; (2)mysql-5.7.15(64位) vs2013中的设置(按步骤来,顺序不要乱) (1)首先在vs2013中新建一个控制台程序 Mysq…

leetcode542. 01 矩阵(bfs/dp)

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 bfs代码 class Solution {int[][] res;public int[][] updateMatrix(int[][] matrix) {int[][] dirnew…

react本地储存_如何使用React和本地存储构建freeCodeCamp的配方框

react本地储存by Edward Njoroge爱德华尼约格(Edward Njoroge) 如何使用React和本地存储构建freeCodeCamp的配方框 (How to build freeCodeCamp’s recipe box using React and local storage) I completed my first edition of the Free Code Camp recipe box project on May…

调用接口返回500_公交卡余额查询接口开放使用啦!

API说明本API返回数据仅支持JSON格式且会对中文进 行unicode 编码,JSON格式返回数据基本格式如下:{"errCode": 0,"errMsg": "OK","data": {}}其中 errCode 表示请求状态,0表示请求成功, …

stark组件开发之组合搜索基本显示

数据的获取,上一篇,已经有了!然后就是,如何进行展示的问题。到了展示这里,又有了新的问题, 因为从数据库,取得的数据。 分为 queryset 和 tuple 两种数据结构。tuple 中,只是字符串。…

美国安全厂商在云安全上的最新进展

本文讲的是美国安全厂商在云安全上的最新进展,【IT168 资讯】优利系统公司日前推出了一系列云产品和服务,并且着重强调企业创建私有云,公有云或混合云工具的安全。  Unisys Secure Cloud是优利系统公司推出的一种管理云服务,承诺…

hessianphp java_hessian 在PHP中的使用

一、hessian是什么?看到这个单词我还不知道怎么读,音标是[hes]读黑森。Hessian是一个轻量级的远程的数据交换工具,使用简单的方法提供了RMI(远程方法调用)的功能. 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议&…

leetcode1025. 除数博弈(dp/数学)

爱丽丝和鲍勃一起玩游戏&#xff0c;他们轮流行动。爱丽丝先手开局。 最初&#xff0c;黑板上有一个数字 N 。在每个玩家的回合&#xff0c;玩家需要执行以下操作&#xff1a; 选出任一 x&#xff0c;满足 0 < x < N 且 N % x 0 。 用 N - x 替换黑板上的数字 N 。 如…

100万用户服务器_我的应用在一个月内如何增长超过100万用户

100万用户服务器by Assaf Elovic通过阿萨夫埃洛维奇 我的应用在一个月内如何增长超过100万用户 (How my app grew by over 1M users in one month) 只需要这种简单的每周方法和耐心。 (All it took was this simple weekly approach and patience.) Building and promoting a …

原生支付url参数错误_小程序支付

下载微信JSAPI支付的 SDK : https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php.zip &#xff1b;解压后放在extend 文件夹下&#xff0c;命名为wepay下载你的商户证书&#xff0c;放在extend/wepay/cert/ 文件夹下面。自行将 extend/wepay/example/WxPay.Config.p…

Android清理设备内存具体完整演示样例(二)

版权声明&#xff1a; https://blog.csdn.net/lfdfhl/article/details/27672913 MainActivity例如以下: package cc.c;import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.List; import android.app.Activity; import a…

java图片合成视频_使用JAVACV把图片合成视频

使用JAVACV1.2把图片合成视频&#xff0c;直接上代码。自己mark一下&#xff0c;也希望能够帮助更多的人。package test;import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;import java.io.File;import org.bytedeco.javacpp.avcodec;import org.bytedeco.java…

NPOI导出Excel

首先在官网去下载NPOI&#xff0c;把dll引用到项目中&#xff0c;然后获取列表调用下面的方法就可以导出 后台代码&#xff1a; /// <summary> /// NPOI导出Excel /// </summary> /// <param name"dt"></param> /// <param name"fil…

leetcode1028. 从先序遍历还原二叉树(dfs/栈)

我们从二叉树的根节点 root 开始进行深度优先搜索。 在遍历中的每个节点处&#xff0c;我们输出 D 条短划线&#xff08;其中 D 是该节点的深度&#xff09;&#xff0c;然后输出该节点的值。&#xff08;如果节点的深度为 D&#xff0c;则其直接子节点的深度为 D 1。根节点的…

react jest测试_如何使用Jest和react-testing-library测试Socket.io-client应用程序

react jest测试by Justice Mba由Mba法官 如何使用Jest和react-testing-library测试Socket.io-client应用程序 (How to test a Socket.io-client app using Jest and the react-testing-library) Testing the quality of real-time Socket.io-client integration seems to have…

统计学会用到python吗_统计学学的统计软件深吗(例如Python)普通一本统计学大一不知道该干什么?...

统计学的话&#xff0c;不考虑把基础课和专业课好好学一学嘛&#xff5e; 大一的话数分高代几何已经占了很长时间啦&#xff0c;多刷刷题&#xff0c;把绩点和排名搞得高一点是重中之重嘛&#xff5e;再说学习语言的事儿&#xff5e; 要说日常使用&#xff0c;那还是更推荐pyth…

枚举转中文,通过反射方法与描述的方式获取

示例&#xff1a; 有人为了显示中文&#xff0c;这样定义枚举吗&#xff1f; publicenum TimeOfDay { 上午, 下午, 晚上 }; 这样定义&#xff0c;很别扭&#xff0c;特别是在使用的时候&#xff0c; 比如&#xff0c;this.Time TimeOfDay.上午; 而…