A toggle button is a QPushButton in a special mode. It is a button that has two states: pressed and not pressed. We toggle between these two states by clicking on it. There are situations where this functionality fits well.
代码:
# coding='utf-8'
from PyQt5.QtWidgets import QApplication, QWidget,\
QPushButton, QFrame
from PyQt5.QtGui import QColor
import sys
class Gui(QWidget):
def __init__(self):
super(Gui, self).__init__()
self.start()
def start(self):
# 设置初始颜色:黑色,创建成类属性还是为了类内通信
self.color = QColor(0, 0, 0)
# 创建按了后将颜色改成红色的选择按钮
red_button = QPushButton('红色', self)
# 这个就是让按钮'特殊化'的设置-->\
# 让按钮变得只有两种状态:选中/未选中
red_button.setCheckable(True)
red_button.move(10, 10)
# 给按钮(event source)绑定slot
# event target(signal) 是clicked,给信号加上中括号\
# 然后括号里的类型就是传递给slot参数的类型
red_button.clicked[bool].connect(self.set_color)
# 创建按了后将颜色改成绿色的选择按钮
green_button = QPushButton('绿色', self)
green_button.setCheckable(True)
green_button.move(10, 60)
green_button.clicked[bool].connect(self.set_color)
# 创建按了后将颜色改成蓝色的选择按钮
blue_button = QPushButton('蓝色', self)
blue_button.setCheckable(True)
blue_button.move(10, 110)
blue_button.clicked[bool].connect(self.set_color)
# 这里注意所有组件都要加上父组件的参数-->表示是存在于哪个组件上
self.squre = QFrame(self)
# 注意子框架组件必须要设置大小它才能显示出来-->和Tkiner框架一样
self.squre.setGeometry(150, 20, 100, 100)
# 利用setStyleSheet给框架背景设置颜色属性
self.squre.setStyleSheet(
'QWidget {background-color: %s}' % self.color.name()
)
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('选择按钮')
self.show()
def set_color(self, pressed):
# 利用sender来辨别是哪个按钮被按下了
sender = self.sender()
if pressed:
# 如果某个按钮是按下的-->\
# 那么我们就在最终颜色里添加这个按钮表示的颜色
val = 255
else:
# 如果某个按钮没按下-->\
# 就把最终颜色里这个按钮表示的颜色去掉
val = 0
# 注意因为这里颜色用的是RGB表示法,\
# 这三种颜色的不同配比可以产生任何颜色
if sender.text() == '红色':
# 把颜色里的红色成分设置成(255(纯红色)/0(没有红色))
self.color.setRed(val)
elif sender.text() == '绿色':
# 把颜色里的绿色成分设置成(255(纯绿色)/0(没有绿色))
self.color.setGreen(val)
else:
# 把颜色里的蓝色成分设置成(255(纯蓝色)/0(没有蓝色))
self.color.setBlue(val)
self.squre.setStyleSheet(
'QWidget {background-color: %s}' % self.color.name()
)
app = QApplication(sys.argv)
gui = Gui()
sys.exit(app.exec_())
运行结果:255红+255绿 ---->黄
RGB都是255 --> 白