标签:
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部件的背景色。
标签:
原文地址:http://www.cnblogs.com/moonlightpoet/p/5357101.html