PyQt5 – 复选框的圆形指示器

  • Post category:Python

以下是关于Python中PyQt5复选框圆形指示器的详细使用攻略。

简介

PyQt5是Python下的一个非常强大的GUI框架,可以用于开发跨平台的桌面应用。复选框是一种常见的GUI控件,而圆形指示器是表示复选框被选中的一种形式。在PyQt5中,可以使用QCheckBox控件来创建复选框,同时通过设置QSS样式表来实现圆形指示器。

使用步骤

以下是使用PyQt5实现复选框圆形指示器的步骤:

  1. 创建QCheckBox控件并设置其状态为未选中。

checkbox = QCheckBox("复选框", self)
checkbox.setChecked(False)

  1. 创建QSS样式表并设置选中时的样式。

style = """
QCheckBox::indicator:checked {
border: 2px solid black;
border-radius: 6px;
background-color: green;
width: 9px;
height: 9px;
}
"""

  1. 设置QCheckBox控件的样式表为上述样式。

checkbox.setStyleSheet(style)

  1. 设置槽函数,响应复选框状态变化事件。

“`
def onCheckboxChanged(state):
print(“复选框状态发生变化,当前状态为:”, state)

checkbox.stateChanged.connect(onCheckboxChanged)
“`

至此,实现复选框圆形指示器的过程已经完成。

示例1:单个复选框

以下是实现单个复选框圆形指示器的示例代码:

from PyQt5.QtWidgets import QApplication, QCheckBox, QWidget
import sys

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("复选框测试")
        self.setGeometry(300, 300, 300, 200)

        checkbox = QCheckBox("复选框", self)
        checkbox.setGeometry(50, 50, 100, 30)
        checkbox.setChecked(False)

        style = """
        QCheckBox::indicator:checked {
            border: 2px solid black;
            border-radius: 6px;
            background-color: green;
            width: 9px;
            height: 9px;
        }
        """
        checkbox.setStyleSheet(style)

        def onCheckboxChanged(state):
            print("复选框状态发生变化,当前状态为:", state)
        checkbox.stateChanged.connect(onCheckboxChanged)

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

代码运行后,可以看到一个包含复选框的窗口,复选框未选中时呈空心样式,选中后呈圆形实心绿色。

示例2:多个复选框

以下是实现多个复选框圆形指示器的示例代码:

from PyQt5.QtWidgets import QApplication, QCheckBox, QWidget, QVBoxLayout
import sys

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("复选框测试")
        self.setGeometry(300, 300, 300, 200)

        layout = QVBoxLayout()
        self.setLayout(layout)

        checkbox1 = QCheckBox("复选框1", self)
        checkbox1.setChecked(False)
        style1 = """
        QCheckBox::indicator:checked {
            border: 2px solid black;
            border-radius: 6px;
            background-color: green;
            width: 9px;
            height: 9px;
        }
        """
        checkbox1.setStyleSheet(style1)
        checkbox1.stateChanged.connect(lambda state: self.checkboxStateChanged(state, 1))
        layout.addWidget(checkbox1)

        checkbox2 = QCheckBox("复选框2", self)
        checkbox2.setChecked(True)
        style2 = """
        QCheckBox::indicator:checked {
            border: 2px solid black;
            border-radius: 6px;
            background-color: red;
            width: 9px;
            height: 9px;
        }
        """
        checkbox2.setStyleSheet(style2)
        checkbox2.stateChanged.connect(lambda state: self.checkboxStateChanged(state, 2))
        layout.addWidget(checkbox2)

    def checkboxStateChanged(self, state, index):
        print("复选框%d状态发生变化,当前状态为:%d" % (index, state))

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

代码运行后,可以看到一个包含两个复选框的窗口,复选框1未选中时呈空心样式,选中后呈圆形实心绿色;复选框2初始选中时呈圆形实心红色,取消选中后呈空心样式。同时,控制台输出每个复选框状态变化时的信息。