学习《PyQt4入门指南 PDF中文版.pdf 》笔记
PyQt5没有开关按钮部件。但是我们可以使用在特殊状态下的QPushButton部件来创建开关按钮。而所谓的开关的按钮就是一个具有按下和未按下两种状态的普通按钮。用户可以通过点击按钮来切换其开或关状态。在一些情况下,这个特性会非常好用。
#!/usr/bin/python
# togglebutton.py
from PyQt5.QtWidgets import QApplication, QPushButton, QStyleFactory
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor
class ToggleButton(QtWidgets.QWidget):
def __init__(self, parent= None):
QtWidgets.QWidget.__init__(self)
self.color = QColor(0, 0, 0)
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('ToggleButton')
self.red = QPushButton('Red', self)
self.red.setCheckable(True)
self.red.move(10, 10)
self.red.clicked.connect(self.setRed)
self.green = QPushButton('Green', self)
self.green.setCheckable(True)
self.green.move(10, 60)
self.green.clicked.connect(self.setGreen)
self.blue = QPushButton('Blue', self)
self.blue.setCheckable(True)
self.blue.move(10, 110)
self.blue.clicked.connect(self.setBlue)
self.square = QtWidgets.QWidget(self)
self.square.setGeometry(150, 20, 100, 100)
self.square.setStyleSheet('QWidget{background-color:%s}'%self.color.name())
QApplication.setStyle(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())
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
qb = ToggleButton()
qb.show()
sys.exit(app.exec_())
在这个例子中,我们创建了三个开关按钮和一个QWidget部件,并将QWidget部件的背景颜色设置为黑色。用户通过开关按钮从红、绿、蓝选择出QWidget部件的背景颜色组合。若开关按钮被按下,则其对应的颜色即被选中。
self.color= QColor(0, 0, 0)
这行语句用来设置初始颜色,红绿蓝三种颜色值均为0时的颜色为黑色。
self.red= QPushButton('Red', self)
self.red.setCheckable(True)
通过创建一个QPushButton并将其设置为可被选择的,即得到我们想要的开关按钮。
self.red.clicked.connect(self.setRed)
我们将red开关按钮的clicked()信号和自定义的setRed()方法连接起来。
QApplication.setStyle(QStyleFactory.create('cleanlooks'))
该行语句用来将应用程序的外观样式设置为cleanlooks的。之所以这样做事因为Linux系统下的默认样式存在一个小的设计缺陷,该缺陷使用用户无法快速的分辨出开关按钮的两种状态。而采用cleanlooks样式外观的表现会好些(书上说的,具体不知道真的假的。)。
ifself.red.isChecked():
self.color.setRed(255)
else:
self.color.setRed(0)
我们使用if语句来判断开关按钮的状态并设置对应的颜色值。
self.square.setStyleSheet('QWidget{background-color:%s}'%self.color.name())
使用setStyleSheet()方法改变QWidget部件的背景色。