PyQt5 使用QDial与QSlider控制控件透明度

本文讲解的是使用PyQt 的QDial和QSlider控件,来控制控件的透明度。

首先使用 QGraphicsOpacityEffect来产生透明度对象,然后设置透明度对象的透明度值,最后设置控件的setGraphicsEffect图形效果,详情看代码。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, \
    QVBoxLayout, QGraphicsOpacityEffect, QDial, QLabel, QHBoxLayout, \
        QSlider
from PyQt5.QtCore import Qt



class Window(QWidget):
    '''hide'''
    def __init__(self):
        super(Window, self).__init__()
        self.initUI()
    
    def initUI(self):
        # 透明设置 setOpacity(i),i=0.0~1.0,0=完全透明,1=不透明
        self.op_0 = QGraphicsOpacityEffect()
        self.op_0.setOpacity(0)
        self.op_1 = QGraphicsOpacityEffect()
        self.op_1.setOpacity(1)

        # button
        self.btn1 = QPushButton('按钮1')

        # dial
        self.dial = QDial(self)
        self.dial.setFixedSize(100, 100)
        # self.dial.setRange(0, 100)
        self.dial.setMinimum(0)
        self.dial.setMaximum(100)
        self.dial.setNotchesVisible(True) # 显示刻度
        self.dial.valueChanged.connect(self.dialChanged)

        # QSlider
        self.slider = QSlider(Qt.Horizontal, self)
        self.slider.setMinimum(0)
        self.slider.setMaximum(100)
        self.slider.valueChanged.connect(self.sliderChanged)

        self.label1 = QLabel(self)
        self.label2 = QLabel(self)
        self.label1.setText('0')
        self.label2.setText('0')

        hbox = QHBoxLayout()
        hbox.addWidget(self.label1)
        hbox.addStretch()
        hbox.addWidget(self.label2)

        # 把按钮放到垂直布局中
        vbox = QVBoxLayout()
        vbox.addWidget(self.btn1)
        vbox.addWidget(self.dial)
        vbox.addWidget(self.slider)
        vbox.addLayout(hbox)

        self.setLayout(vbox)

        # 给按钮添加动作
        self.btn1.clicked.connect(self.btn1_fun)

        # base config
        self.setWindowTitle('PyQt5 元素隐藏属性')
        self.setMinimumSize(650, 450)
        self.i = 0

    def btn1_fun(self):
        print('btn1_fun')
        if self.i == 0:
            self.op_0.setOpacity(0)
            self.i += 1
        elif self.i == 1:
            self.op_0.setOpacity(1)
            self.i = 0
        self.btn1.setGraphicsEffect(self.op_0)
              
    def dialChanged(self):
        # 修改btn1的透明度
        self.op_0.setOpacity((self.dial.value() / 100))
        print(self.dial.value())
        self.btn1.setGraphicsEffect(self.op_0)
        self.label1.setText(str(self.dial.value() / 100))
    
    def sliderChanged(self):
        # 修改dia1的透明度
        self.op_1.setOpacity((self.slider.value() / 100))
        self.dial.setGraphicsEffect(self.op_1)
        self.label2.setText(str(self.slider.value() / 100))



if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

除非注明,否则均为中心线原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.z10.xin/657.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注