PyQt 定义控件SwitchButton 指南

news2024/12/23 15:01:36

PyQt 定义控件SwitchButton 指南

  • PyQt 定义控件SwitchButton 指南
    • 实例程序
    • 效果如下所示:

PyQt 定义控件SwitchButton 指南

SwitchButton 是一个自定义开关按钮控件,通常用于在用户界面中启用或禁用某些功能或选项。它是一种用户友好的控件,允许用户通过切换按钮的状态来控制应用程序的行为。

以下是 SwitchButton 的一些常见特征和用途:

  1. 切换功能SwitchButton 允许用户轻松地切换某种功能、选项或状态。它通常用于启用或禁用某些功能,例如启用/禁用声音、允许/禁止通知等。
  2. 图形外观SwitchButton 的外观通常是一个带有两种状态的图形按钮。通常,开启状态用一种颜色或图标表示,而关闭状态用另一种颜色或图标表示。开关按钮的外观可以根据应用程序的设计进行自定义。
  3. 交互性:用户可以单击 SwitchButton 来切换它的状态。这是一种直观的交互方式,用户可以快速了解功能是否启用。
  4. 逻辑绑定SwitchButton 可以与特定的逻辑或设置相关联。例如,当开关按钮处于开启状态时,相关功能将被启用,当它处于关闭状态时,相关功能将被禁用。
  5. 状态反馈:通常,SwitchButton 可以提供用户状态反馈,以指示当前状态是开启还是关闭。这可以是文本标签或颜色变化。

在许多图形用户界面工具包中,包括 PyQt5,开关按钮控件是一个常见的元素,用于增加用户界面的互动性和可配置性。您可以根据您的需求自定义开关按钮的外观和行为,并将其集成到您的应用程序中,以实现用户友好的功能切换。

实例程序

#!/usr/bin/env python


import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel,QWidget,QVBoxLayout
from PyQt5.QtCore import Qt,QRect
from PyQt5.QtGui import  QPainter,QFont,QBrush,QColor,QPen


class SwitchButton(QWidget):
    def __init__(self, parent=None):
        super(SwitchButton, self).__init__(parent)
        self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        #self.resize(70, 30)
        # SwitchButtonstate:True is ON,False is OFF
        self.state = False
        self.setFixedSize(80, 40)

    def mousePressEvent(self, event):
        '''
        set click event for state change
        '''
        super(SwitchButton, self).mousePressEvent(event)
        self.state = False if self.state else True
        self.update()

    def paintEvent(self, event):
        '''Set the button'''
        super(SwitchButton, self).paintEvent(event)

        # Create a renderer and set anti-aliasing and smooth transitions
        painter = QPainter(self)
        painter.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
        # Defining font styles
        font = QFont("Arial")
        font.setPixelSize(self.height()//3)
        painter.setFont(font)
        # SwitchButton state:ON
        if self.state:
            # Drawing background
            painter.setPen(Qt.NoPen)
            brush = QBrush(QColor('#bd93f9'))
            painter.setBrush(brush)
            # Top left corner of the rectangle coordinate
            rect_x = 0
            rect_y = 0
            rect_width = self.width()
            rect_height = self.height()
            rect_radius = self.height()//2
            painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)
            # Drawing slides circle
            painter.setPen(Qt.NoPen)
            brush.setColor(QColor('#ffffff'))
            painter.setBrush(brush)
            # Phase difference pixel point
            # Top left corner of the rectangle coordinate
            diff_pix = 3
            rect_x = self.width() - diff_pix - (self.height()-2*diff_pix)
            rect_y = diff_pix
            rect_width = (self.height()-2*diff_pix)
            rect_height = (self.height()-2*diff_pix)
            rect_radius = (self.height()-2*diff_pix)//2
            painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)

            # ON txt set
            painter.setPen(QPen(QColor('#ffffff')))
            painter.setBrush(Qt.NoBrush)
            painter.drawText(QRect(int(self.height()/3), int(self.height()/3.5), 50, 20), Qt.AlignLeft, 'ON')
        # SwitchButton state:OFF
        else:
            # Drawing background
            painter.setPen(Qt.NoPen)
            brush = QBrush(QColor('#525555'))
            painter.setBrush(brush)
            # Top left corner of the rectangle coordinate
            rect_x = 0
            rect_y = 0
            rect_width = self.width()
            rect_height = self.height()
            rect_radius = self.height()//2
            painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)

            # Drawing slides circle
            pen = QPen(QColor('#999999'))
            pen.setWidth(1)
            painter.setPen(pen)
            # Phase difference pixel point
            diff_pix = 3
            # Top left corner of the rectangle coordinate
            rect_x = diff_pix
            rect_y = diff_pix
            rect_width = (self.height()-2*diff_pix)
            rect_height = (self.height()-2*diff_pix)
            rect_radius = (self.height()-2*diff_pix)//2
            painter.drawRoundedRect(rect_x, rect_y, rect_width, rect_height, rect_radius, rect_radius)

            # OFF txt set
            painter.setBrush(Qt.NoBrush)
            painter.drawText(QRect(int(self.width()*1/2), int(self.height()/3.5), 50, 20), Qt.AlignLeft, 'OFF')


def main():
    app = QApplication(sys.argv)
    window = QMainWindow()
    window.setGeometry(100, 100, 100, 290)
    window.setWindowTitle("Switch Button Example")
    switch1 = SwitchButton()
    switch2 = SwitchButton()
    layout = QVBoxLayout()
    layout.addWidget(switch1)
    layout.addWidget(switch2)
    window.setCentralWidget(QWidget())
    window.centralWidget().setLayout(layout)
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

效果如下所示:

在这里插入图片描述


End

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

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

相关文章

云汉芯城一站式电子制造平台启想智联顺利通过IATF16949:2016质量管理体系认证

近日,云汉芯城旗下一站式电子制造服务平台上海启想智能科技有限公司(以下简称“启想智联”)顺利通过IATF16949:2016质量管理体系认证,并获得由URS颁发的认证证书。通过此项认证,标志着启想智联在全球汽车行业的技术规范…

AdminLTE 2 图标大全

AdminLTE 2 图标大全 链接地址:::::AdminLTE 2 | Icons

再也不用花钱了,教你一套键鼠控制多台电脑

Synergy是一款用于多台电脑之间共享键盘和鼠标的软件。它允许用户使用一套键盘和鼠标同时控制多台电脑,极大地提高了工作效率。Synergy支持跨平台使用,包括Windows、Mac和Linux等操作系统。用户只需在每台电脑上安装Synergy客户端,并按照软件…

十四.镜头知识之镜头色差

十四.镜头知识之镜头色差 文章目录 十四.镜头知识之镜头色差**14.1 色差** /Chromatic Aberration/**14.2 纵向色差****14.3 横向色差**14.4 ISP色彩还原同一场景两张由不同镜头拍出来的照片比较:上方的照片来自更高质量的镜头,下方的照片则出现了明显的色差,特别是在房顶右…

什么是云原生?零基础学云原生难吗?

伴随着云计算的浪潮,云原生概念也应运而生,而且火得一塌糊涂,但真正谈起“云原生”,大多数非 IT 从业者的认知往往仅限于将服务应用放入云端,在云上处理业务。实际上,云原生远不止于此。 现在越来越多的企…

LIMS第三方实验室信息化管理系统

实验室信息化管理系统LIMS,由计算机硬件和应用软件组成,能够实现实验室数据和信息的收集、分析、陈述和处理。实验室信息化管理系统LIMS是以查验检测作业为中心,包含一个以样品分析为主线的从样品登录、登记处理、查验检测、数据计算分析到成…

文字连续光影特效实现思路

文字连续光影特效实现思路 实现了一个文字阴影的效果,文字会不断变换颜色并产生阴影效果。具体实现如下: 使用 keyframes 定义一个名为 shadow 的动画,动画从当前颜色到 #ff0266,同时设置文字阴影的偏移量和模糊半径。使用 * 选…

CSS魔法!如何将任意CSS类型转换为数值?

在 CSS 中有各式各样的类型值,例如 1rem、10vw、100cqw等等,这些相对值给与了 CSS 强大的适应能力。但有时候,我们还需要知道这些相对值所对应的真实值,也就是px值,比如在移动端,我们经常会设置这样的根字号…

实验四:回溯算法的设计与分析

某不知名学校大二算法课实验报告 题目来自力扣 第一题:幂集 力扣题目链接:幂集 题目描述: 幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。 说明:解集不能包含重复的子集。 示例: 输入&#xf…

2023年中国TFT-LCD面板产业链、需求量及市场规模分析[图]

按显示技术尺寸来分,主要分为大尺寸和小尺寸(10寸以下),TFT-LCD行业下游主要是各类型消费电子,包括PC显示器,液晶电视,智能手机等。 TFT-LCD面板产业链 资料来源:共研产…

使用simpleperf跟踪自定义的perf events

目录 前言 tracepoint简介 添加tracepoint: 使用simpleperf 跟踪自定义的tracepoint 前言 simpleperf可以跟踪指定的perf events,通过adb shell & simpleperf list可以查看当前设备支持的所有perf event。但是如果这些perf event不能满足我们的…

深入理解操作系统之线程

目录 补充进程知识: 是什么触发了进程的切换? 进程切换时要做什么? 切换进程的时机分为主动和被动。 进程上下文指的是什么? 线程篇: 以进程创建子进程为例引入线程: 线程定义: Motivat…

Spring Cloud Alibaba—Sentinel 控制台安装

1、Sentinel 控制台包含如下功能: 查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。 监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最…

实验室超声波清洗器如何选择?

实验室是很多科研人员工作的地方,而且他们的工作环境较为特殊,与一般的工作环境有所不同,在大多数实验过程后会通常都会需要使用到效率高实验室超声波清洗机,而且其清洁效率也要比普通的清洗机高。不同实验室会对实验室超声波清洗…

记一次密码重置到后台GetShell

1.尝试登录 打开网页,看到一个登录,尝试点击 2.发现提示 Unknown host 3.因为刚开始是用 IP 访问的网站,点击登录按钮为域名访问该网站,猜测可能使用域名访问不了,于是把域名改为IP加上后... 1.尝试登录 1.打开网页&…

ITextRenderer将PDF转换为HTML详细教程

引入依赖 <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.18</version></dependency> 问题一&#xff1a;输出中文字体 下载字体simsun.ttc 下载链接&am…

动态规划:09 0-1背包理论基础I

动态规划&#xff1a;09 0-1背包理论基础I 背包问题概述 对于面试的话&#xff0c;其实掌握01背包&#xff0c;和完全背包&#xff0c;就够用了&#xff0c;最多可以再来一个多重背包。 如果这几种背包&#xff0c;分不清&#xff0c;就看下图 leetcode上连多重背包的题目都…

【MATLAB-Retinex图像增强算法的去雾技术】

续&#xff1a;【MATLAB-基于直方图优化的图像去雾技术】 【MATLAB-Retinex图像增强算法的去雾技术】 1 原图2 MATLAB实现代码3 结果图示 参考书籍&#xff1a;计算机视觉与深度学习实战:以MATLAB、Python为工具&#xff0c; 主编&#xff1a;刘衍琦, 詹福宇&#xff0c; 王德建…

C++入门篇(3)---引用

1.引用 你有没有被人起过外号?比如身边的朋友,喊他的时候不会叫他的全名,像我很好的朋友,我一般都喜欢叫他"阿威",而不会去称呼全名.我叫他"阿威",他还是他没有什么问题. 这里新登场的引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&am…

学会这招,轻松掌握学校教学质量!

在教育领域&#xff0c;教育管理者和学校管理员需要确保教学过程的质量和效率。在线巡课系统是一种强大的工具&#xff0c;可以帮助他们实时监测教学过程、教师绩效和学生学习情况。 在线巡课系统结合了技术和教育的最佳实践&#xff0c;为学校提供了数据驱动的决策支持和资源管…