沃梦达 / IT编程 / 前端开发 / 正文

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

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 设置窗体透明控件不透明的操作