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技术站