PyQt5 – 当从中间状态按下时,为被按下的指示器设置背景图片 | 复选框

  • Post category:Python

下面是python的“PyQt5 – 当从中间状态按下时,为被按下的指示器设置背景图片|复选框”的完整使用攻略。

简介:

PyQt5是一个丰富多样的Python GUI库,允许使用者开发桌面应用程序。PyQt5提供了很多便捷的类和功能,其中包括QPushButton、QCheckBox、QGroupBox、QLabel、QLineEdit、QComboBox、QTableView、QMenuBar等等控件。本文将主要介绍如何为复选框添加背景图片,方法主要包含以下几个步骤:

1.创建复选框对象
2.设置复选框状态改变的槽函数
3.在槽函数中添加代码,根据复选框的状态来修改背景图片
4.在主程序中运行

示例1: 将背景图片嵌入复选框

在这个例子中,我们将使用QPixmap创建QCheckBox对象,并将图片设置为复选框的背景。起始状态为未选择状态,当复选框被选中或解除选中时,背景图片将随之改变。

import sys
from PyQt5 import QtWidgets, QtCore, QtGui

class Example(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):
        hbox = QtWidgets.QHBoxLayout()
        pixmap = QtGui.QPixmap('unchecked.png')

        self.cb1 = QtWidgets.QCheckBox('Check me')
        self.cb1.setIcon(QtGui.QIcon(pixmap))
        self.cb1.setIconSize(QtCore.QSize(30, 30))
        self.cb1.stateChanged.connect(self.changeIcon)

        hbox.addWidget(self.cb1)

        self.setLayout(hbox)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QCheckBox')
        self.show()

    def changeIcon(self, state):
        if state == QtCore.Qt.Checked:
            pixmap = QtGui.QPixmap('checked.png')
        else:
            pixmap = QtGui.QPixmap('unchecked.png')

        self.cb1.setIcon(QtGui.QIcon(pixmap))

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

在此示例中,我们在initUI函数中定义了水平布局窗口 hBoxLayout对象(QHBoxLayout()),然后使用QPixmap创建第一个复选框对象(cb1),该控件显示名称为 “Check me”。在创建cb1对象之后,调用setIcon()方法为其设置背景图片,并设置其大小为源图像大小的30×30像素(setIconSize())。

接下来,我们定义changeIcon函数,该函数设置当满足QCheckBox的状态时的新背景图片。若当前的状态为选中(QtCore.Qt.Checked),则设置“checked.png”作为背景图片,否则设置“unchecked.png”作为背景图片。在这个函数中,我们使用cb1对象的setIcon()方法来设置背景图片。

示例2: 将图片嵌入复选框并更改背景颜色

在这个示例中,我们将使用如下方式创建一个QGroupBox内的第一个QCheckBox对象。与第一个示例中的相似,使用QPixmap设置背景图片,并将其大小设置为50×50像素。该控件名为”Check”。在创建cb2对象之后,使用样式设置将其背景颜色定义为了灰色。

import sys
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QGroupBox, QCheckBox
from PyQt5.QtCore import Qt

class CheckBox(QWidget):

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

        self.initUI()


    def initUI(self):

        grp = QGroupBox('GroupBox')
        hbox = QHBoxLayout()
        pixmap = QPixmap('unchecked.png')

        self.cb2 = QCheckBox('Check')
        self.cb2.setIcon(QIcon(pixmap))
        self.cb2.setIconSize(Qt.QSize(50, 50))
        self.cb2.setStyleSheet('QCheckBox {background-color: gray; }')

        hbox.addWidget(self.cb2)
        grp.setLayout(hbox)

        vbox = QVBoxLayout()
        vbox.addWidget(grp)

        self.setLayout(vbox)

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


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

在此示例中,我们创建了一个QGroupBox对象(该对象名为 “GroupBox”),为其创建属于 QHBoxLayout() 对象的 hbox 对象。接下来创建一个QPixmap对象,然后将第二个复选框(cb2)创建为QCheckBox对象,其背景图片将设置为创建的QPixmap对象。

为了更改cb2的背景色,我们在对象中以样式的方式使用setStyleSheet()方法。此样式将背景颜色定义为灰色。

最后,我们创建一个 QVBoxLayout()对象作为主布局并将GroupBox对象添加到其中。

在本文中,我们讨论了如何使用PyQt5为QCheckBox控件添加背景图片和更改背景颜色属性。在示例代码中,通过两种不同的方式使用了图片,并展示了如何通过状态变化而修改图像。