PyQt5 – 检查框中的图像

  • Post category:Python

我们来详细讲解一下Python中使用PyQt5库中的QCheckBox和QLabel来实现“检查框中的图像”的完整使用攻略。

1. 设置QCheckBox状态改变的响应函数

首先,我们需要将一个QCheckBox和一个QLabel添加到应用中。QCheckBox用于选择是否显示图片,QLabel则用于显示图片。对于QCheckBox的状态改变,我们需要定义一个响应函数,这里我们将用lambda表达式来简化代码:

checkbox = QCheckBox("显示图片", self)
checkbox.stateChanged.connect(lambda:self.showOrHideImage(checkbox, label))

2. 显示或隐藏图片

接下来,我们需要实现showOrHideImage函数。该函数接受两个参数:QCheckBox对象和QLabel对象。当QCheckBox状态改变时,该函数将会被调用。如果选中了QCheckBox,那么我们需要显示图片,否则我们需要隐藏它。我们使用QLabel的setPixmap函数来指定要显示的图片。注意,这里我们需要使用QPixmap类将图片加载为QPixmap对象。

def showOrHideImage(self, checkbox, label):
    if checkbox.isChecked():
        img = QPixmap("image.jpg")
        label.setPixmap(img)
        label.show()
    else:
        label.clear()
        label.hide()

以上是PyQt5 – 检查框中的图像的核心部分,现在让我们来看两个完整的实例。

示例一:在窗口中显示图片

from PyQt5.QtWidgets import QApplication, QMainWindow, QCheckBox, QLabel
from PyQt5.QtGui import QPixmap
import sys

class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setGeometry(100, 100, 600, 400)
        self.setWindowTitle("PyQt5 QCheckBox Example")

        label = QLabel(self)
        label.setGeometry(50, 50, 500, 300)
        label.setAlignment(1)

        checkbox = QCheckBox("显示图片", self)
        checkbox.stateChanged.connect(lambda:self.showOrHideImage(checkbox, label))
        checkbox.move(50, 10)

    def showOrHideImage(self, checkbox, label):
        if checkbox.isChecked():
            img = QPixmap("image.jpg")
            label.setPixmap(img)
            label.show()
        else:
            label.clear()
            label.hide()

app = QApplication(sys.argv)
win = Window()
win.show()

sys.exit(app.exec_())

在这个示例中,我们在一个窗口中创建了QCheckBox和QLabel对象。当checkbox的状态改变时,我们要么显示图片,要么隐藏它。

示例二:同时显示多个图片

from PyQt5.QtWidgets import QApplication, QMainWindow, QCheckBox, QVBoxLayout, QHBoxLayout, QLabel, QWidget
from PyQt5.QtGui import QPixmap
import sys

class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setGeometry(100, 100, 600, 400)
        self.setWindowTitle("PyQt5 QCheckBox Example")

        checkbox1 = QCheckBox("图片1", self)
        checkbox2 = QCheckBox("图片2", self)
        checkbox3 = QCheckBox("图片3", self)
        checkbox1.stateChanged.connect(lambda:self.showOrHideImage(checkbox1, label1))
        checkbox2.stateChanged.connect(lambda:self.showOrHideImage(checkbox2, label2))
        checkbox3.stateChanged.connect(lambda:self.showOrHideImage(checkbox3, label3))

        label1 = QLabel(self)
        label1.setAlignment(1)
        label2 = QLabel(self)
        label2.setAlignment(1)
        label3 = QLabel(self)
        label3.setAlignment(1)

        layout = QHBoxLayout()
        sublayout1 = QVBoxLayout()
        sublayout2 = QVBoxLayout()
        sublayout3 = QVBoxLayout()

        sublayout1.addWidget(checkbox1)
        sublayout1.addWidget(label1)
        sublayout2.addWidget(checkbox2)
        sublayout2.addWidget(label2)
        sublayout3.addWidget(checkbox3)
        sublayout3.addWidget(label3)

        layout.addLayout(sublayout1)
        layout.addLayout(sublayout2)
        layout.addLayout(sublayout3)

        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

    def showOrHideImage(self, checkbox, label):
        if checkbox.isChecked():
            img = QPixmap(checkbox.text() + ".jpg")
            label.setPixmap(img)
            label.show()
        else:
            label.clear()
            label.hide()

app = QApplication(sys.argv)
win = Window()
win.show()

sys.exit(app.exec_())

在这个示例中,我们创建了三个QCheckBox和三个QLabel对象,用于实现显示三个不同的图片。我们使用了水平和垂直布局来使它们以一排的方式排列。当checkbox的状态改变时,我们要么显示图片,要么隐藏它。