pyqt5 设置窗体透明控件不透明的操作

PyQt5 中设置窗体和控件的透明度非常简单。我们可以通过设置控件或窗体的透明度值来实现该功能。

以下是实现这一功能的步骤:

步骤 1:导入必要的库

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtCore import Qt

步骤 2:创建窗体

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('透明度设置')

        self.setWindowOpacity(0.6)

        btn = QPushButton('退出', self)
        btn.clicked.connect(QApplication.instance().quit)
        btn.resize(btn.sizeHint())
        btn.move(50, 50)

        self.show()

我们首先创建了一个 QWidget 类。在 initUI 方法中,调用了我们定义的 setWindowOpacity 方法,该方法用于设置窗体的透明度。我们将窗体的透明度设置为 0.6

接下来,在窗体中,我们创建了一个按钮,点击该按钮会退出应用程序。

步骤 3:绘制透明控件

可以通过重载 paintEvent 方法并在该方法中设置透明度值来实现绘制透明控件的功能。

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('透明度设置')

        self.setWindowOpacity(0.6)

        self.show()

    def paintEvent(self, event):

        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):

        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col)

        qp.setBrush(QColor(200, 0, 0, 50))
        qp.drawRect(10, 15, 90, 60)

        qp.setBrush(QColor(255, 80, 0, 160))
        qp.drawRect(130, 15, 90, 60)

        qp.setBrush(QColor(25, 0, 90, 200))
        qp.drawRect(250, 15, 90, 60)

我们在 initUI 方法中只是绘制了窗体。实际上,我们需要重载 paintEvent 方法来处理绘制透明控件的逻辑。

paintEvent 方法中,我们使用 QPainter 类来绘制透明控件。在 drawRectangles 方法中,我们绘制了三个不同的矩形。

我们将每个矩形的透明度设置为不同的值。与窗体透明度一样,我们可以通过将颜色的最后一位设置为透明度值来设置矩形的透明度。

例如,下面的代码设置了一个透明度为 50 的红色矩形:

qp.setBrush(QColor(200, 0, 0, 50))
qp.drawRect(10, 15, 90, 60)

示例 1:控件透明度随窗体透明度变化

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('透明度设置')

        self.setWindowOpacity(0.6)

        btn = QPushButton('退出', self)
        btn.clicked.connect(QApplication.instance().quit)
        btn.resize(btn.sizeHint())
        btn.move(50, 50)

        self.show()

    def paintEvent(self, event):

        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):

        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col)

        rect1 = QRect(10, 15, 90, 60)
        rect2 = QRect(130, 15, 90, 60)
        rect3 = QRect(250, 15, 90, 60)

        self.drawRectangle(qp, rect1)
        self.drawRectangle(qp, rect2)
        self.drawRectangle(qp, rect3)

    def drawRectangle(self, qp, rect):

        color = QColor(200, 0, 0, int(self.windowOpacity() * 255))
        qp.setBrush(color)
        qp.drawRect(rect)

在上面的示例中,我们重载了 drawRectangle 方法,并使用窗体透明度乘以 255 来计算控件的透明度。

示例 2:使用 Slider 来控制透明度

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('透明度设置')

        self.slider = QSlider(Qt.Horizontal, self)
        self.slider.setFocusPolicy(Qt.NoFocus)
        self.slider.setGeometry(30, 40, 100, 30)
        self.slider.valueChanged[int].connect(self.changeOpacity)

        self.show()

    def changeOpacity(self, value):

        self.setWindowOpacity(value/100)

在这个示例中,我们创建了一个 QSlider 控件来控制窗体的透明度。我们将 slider 对象的 valueChanged 信号连接到 changeOpacity 方法上。

changeOpacity 方法中,我们将 slider 的当前值除以 100 以获取透明度值,并将其用于设置窗体的透明度。

通过这两个示例,我们可以了解如何实现控件的透明度和窗体的透明度设置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pyqt5 设置窗体透明控件不透明的操作 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点

    接下来我将详细讲解如何使用HTML5 Canvas画直线并设置线条的样式,包括颜色、端点、交汇点等。 HTML5 Canvas画直线 在使用Canvas画直线之前,我们需要先准备好Canvas画布,具体方法为: <canvas id="myCanvas"></canvas> <script> var c…

    css 2023年6月9日
    00
  • css教程实现div背景色渐变色代码分享

    下面是“CSS教程实现div背景色渐变色代码分享”的完整攻略。 1. 前言 CSS渐变背景色在网页设计中十分常见,它可以为网页带来更加丰富的色彩和视觉效果。本教程将介绍如何使用CSS实现渐变背景色,并提供示例代码和注释,供大家参考。 2. CSS渐变背景色的基本语法 CSS渐变背景色通过background-image属性实现,其基本语法如下: backgr…

    css 2023年6月9日
    00
  • vue 实现 ios 原生picker 效果及实现思路解析

    下面我将为你详细讲解“vue 实现 ios 原生picker 效果及实现思路解析”的完整攻略。 标题 如何实现ios原生picker效果 在Vue中,实现ios原生picker效果主要是通过借助第三方插件picker-component来完成。picker-component是一个基于Vue的picker组件,实现了iphone风格的列表场景。在使用时,我们…

    css 2023年6月10日
    00
  • 详解wow.js中各种特效对应的类名

    下面是关于”详解wow.js中各种特效对应的类名”的完整攻略。 WOW.js WOW.js 是一个实现滚动页面后切换动画效果的 jQuery 插件,通过给 HTML 元素添加相应的类名达到切换动画效果的效果。 特效对应的类名 WOW.js 提供了多种酷炫的动画效果,每一种效果对应一个类名,下面将会对各种特效对应的类名进行详细的解释。 图片特效类名 这些类名用…

    css 2023年6月10日
    00
  • 简单介绍CSS3中Media Query的使用

    下面是“简单介绍CSS3中Media Query的使用”的完整攻略。 什么是Media Query? Media Query是用于响应式设计的CSS3语法,它可以根据设备或用户使用的浏览器的尺寸、方向、解析度等特性,提供不同的样式,从而让网页在不同设备和屏幕尺寸下拥有更好的布局和体验。 Media Query的语法 Media Query语法由@media规…

    css 2023年6月10日
    00
  • 详解基于Vue/React项目的移动端适配方案

    详解基于Vue/React项目的移动端适配方案 移动端适配问题一直困扰着前端开发人员,特别是在不同设备分辨率差异巨大的情况下。本攻略将详细介绍基于Vue/React项目的移动端适配方案,包括使用vw和rem两种方式进行适配。 什么是vw和rem vw和rem是移动端适配中比较常用的两种方式。vw是视窗单位,将屏幕宽度分成100份,1vw表示屏幕宽度的1%。r…

    css 2023年6月10日
    00
  • 解决Vue项目中tff报错的问题

    针对“解决Vue项目中tff报错的问题”,我为大家整理了以下攻略: 1. 了解tff报错的原因 首先,我们需要知道为什么会出现tff报错。tff是vue-cli3推出的一个安全管理工具,主要作用是防止XSS攻击等安全问题。它通过设置Content-Security-Policy头来限制外部脚本和样式的加载,在保证网站安全性的同时也会导致一些问题的出现。 2.…

    css 2023年6月9日
    00
  • jQuery实现图片与文字描述左右滑动自动切换的方法

    下面我将详细讲解“jQuery实现图片与文字描述左右滑动自动切换的方法”的完整攻略,主要分以下几个步骤: 布局HTML结构 编写CSS样式 使用jQuery实现交互效果 接下来将逐步介绍具体的操作步骤。 1. 布局HTML结构 首先需要根据需求布局HTML结构。假设要实现的效果是图片和文字描述在左右滑动自动切换,在HTML结构中需要先定义一个容器元素,然后在…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部