PyQt4开关按钮ToggleButton

PyQt4没有开关按钮部件。但是我们可以使用在特殊状态下的QPushButton部件来创建开关按钮。而所谓的开关按钮就是一个具有按下和未按下两种状态的普通赶牛。用户可以通过单击按钮来切换其开或者关的状态。在一些情形下,这个特性会非常好用。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore 

class ToggleButton(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.color = QtGui.QColor(0, 0, 0)
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('ToggleButton')
        self.red = QtGui.QPushButton('Red', self)
        self.red.setCheckable(True)
        self.red.move(10, 10)
        self.connect(self.red, QtCore.SIGNAL('clicked()'), self.setRed)
        self.green = QtGui.QPushButton('Green', self)
        self.green.setCheckable(True)
        self.green.move(10, 60)
        self.connect(self.green, QtCore.SIGNAL('clicked()'), self.setGreen)
        self.blue = QtGui.QPushButton('Blue', self)
        self.blue.setCheckable(True)
        self.blue.move(10, 110)
        self.connect(self.blue, QtCore.SIGNAL('clicked()'), self.setBlue)
        self.square = QtGui.QWidget(self)
        self.square.setGeometry(150, 20, 100, 100)
        self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('cleanlooks'))
        
    def setRed(self):
        if self.red.isChecked():
            self.color.setRed(255)
        else:
            self.color.setRed(0)
        self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
        
    def setGreen(self):
        if self.green.isChecked():
            self.color.setGreen(255)
        else:
            self.color.setGreen(0)
        self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
    
    def setBlue(self):
        if self.blue.isChecked():
            self.color.setBlue(255)
        else:
            self.color.setBlue(0)
        self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
    
app =QtGui.QApplication(sys.argv)
tb = ToggleButton()
tb.show()
sys.exit(app.exec_())
        
        

效果:

在这个例子中,我们创建了三个开关按钮和一个QWidget部件,并将QWidget部件的背景颜色设置为黑色。用户通过开关按钮从红、绿、蓝选择出QWidget部件的背景颜色组合。若开关按钮被按下,则其对应的颜色即被选中。

        self.color = QtGui.QColor(0, 0, 0)

这行语句用来设置初始颜色,红绿栏三种颜色均为0时的颜色为黑色。

        self.red = QtGui.QPushButton('Red', self)
        self.red.setCheckable(True)

通过创建一个QPushButton并将其设置为可选择的,即得到我们想要的开关按钮。

        self.connect(self.red, QtCore.SIGNAL('clicked()'), self.setRed)

我们将red开关按钮的clicked()信号和自定义的setRed()方法连接起来。

        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('cleanlooks'))

该行语句用来将应用程序的外观样式设置为cleanlooks的。之所以这样做时因为Linux下的默认样式存在一个小的缺陷,该缺陷使用户无法快速地分辨出开关按钮的两种状态。而采用cleanlooks样式外观的表现会好些。

        if self.red.isChecked():
            self.color.setRed(255)
        else:
            self.color.setRed(0)

我们使用if语句来判断开关按钮的状态并设置对应的颜色值。

        self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())

使用setStyleSHeet()方法改变QWidget部件的背景色。

原文地址:https://www.cnblogs.com/moonlightpoet/p/5357101.html