PyQt5 – 改变未选中状态下的单选按钮的颜色

  • Post category:Python

PyQt5是一款Python编程语言的GUI编程工具包,它提供了一种快捷、灵活、稳定的GUI编程方式,支持多种操作系统平台,如Windows、Linux和MAC OS。在使用PyQt5时,可能会遇到需要改变未选中状态下单选按钮的颜色的需求,下面给出该需求的详细使用攻略。

安装PyQt5

在使用PyQt5之前,需要先进行安装。可通过pip指令进行安装,输入以下指令即可:

pip install PyQt5

改变未选中状态下的单选按钮的颜色

使用PyQt5时,单选按钮控件默认状态下的颜色为灰色。若想改变未选中状态下的单选按钮的颜色,可通过CSS样式表来实现,具体实现方法如下:

示例1

from PyQt5 import QtWidgets, QtGui
import sys

class Example(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):      

        vbox = QtWidgets.QVBoxLayout()

        rb1 = QtWidgets.QRadioButton('RadioButton 1')
        rb1.setStyleSheet("QRadioButton::indicator:!checked {background-color: red;}")
        vbox.addWidget(rb1)

        rb2 = QtWidgets.QRadioButton('RadioButton 2')
        rb2.setStyleSheet("QRadioButton::indicator:!checked {background-color: blue;}")
        vbox.addWidget(rb2)

        rb3 = QtWidgets.QRadioButton('RadioButton 3')
        rb3.setStyleSheet("QRadioButton::indicator:!checked {background-color: green;}")
        vbox.addWidget(rb3)

        self.setLayout(vbox)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Example')
        self.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

示例2

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

class Window(QWidget):

    def __init__(self):
        super().__init__()
        self.setGeometry(300, 300, 400, 200)
        self.setWindowTitle("Radio Button Example")
        layout = QGridLayout()
        self.setLayout(layout)

        self.radiobutton1 = QRadioButton("Radio Button 1")
        self.radiobutton2 = QRadioButton("Radio Button 2")
        self.radiobutton3 = QRadioButton("Radio Button 3")

        stylesheet="""            
        QRadioButton::indicator { width: 15px; height: 15px;}
        QRadioButton::indicator:unchecked { 
                border: 2px solid black;
                border-radius:7px;
        }
        QRadioButton::indicator:checked {
            border:2px solid black;
            border-radius:7px;
            background-color : yellow;

        }
        """
        self.radiobutton1.setStyleSheet(stylesheet)
        self.radiobutton2.setStyleSheet(stylesheet)
        self.radiobutton3.setStyleSheet(stylesheet)

        layout.addWidget(self.radiobutton1)
        layout.addWidget(self.radiobutton2)
        layout.addWidget(self.radiobutton3)


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

上述两例均是通过设置单选按钮的样式表到达改变背景颜色的目的。其中:

  • 第一例中通过在样式表中设置”QRadioButton::indicator:!checked {background-color: red;}”来实现单选按钮未选中状态下的背景颜色为红色,在使用过程中,可将样式表中的”red”改为其他颜色值实现相应的更改颜色。
  • 第二例中样式表设置更加具有通用性,样式表中通过设置边框、边框半径、颜色等属性实现对单选按钮的样式自定义,可将其应用到多个单选按钮控件中。

注意:在调用窗口时应添加stylesheet。具体实现方法为在窗口初始化时调用setStyleSheet()方法即可。