You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyQt5实现带图片的复选框?附尝试代码

用PyQt5实现带图片的复选框及侧边栏列表

方法1:直接利用QCheckBox的图标功能

QCheckBox本身支持设置图标,通过setIcon()方法就能快速实现带图片的复选框,这是最简便的实现方式。

示例代码

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QCheckBox, QFrame)
from PyQt5.QtGui import QIcon, QPixmap

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("带图片的复选框侧边栏")

# 创建侧边栏容器与布局
sidebar_frame = QFrame()
sidebar_frame.setFrameShape(QFrame.StyledPanel)
layout = QVBoxLayout(sidebar_frame)

# 封装带图片复选框的创建函数
def create_image_checkbox(text, image_path):
    cb = QCheckBox(text)
    # 加载本地图片并设置为复选框图标
    cb.setIcon(QIcon(QPixmap(image_path)))
    # 适配图标大小
    cb.setIconSize(cb.icon().actualSize(cb.sizeHint()))
    return cb

# 向侧边栏添加多个带图片的复选框
layout.addWidget(create_image_checkbox("选项1", "26.png"))
layout.addWidget(create_image_checkbox("选项2", "26.png"))
layout.addWidget(create_image_checkbox("选项3", "26.png"))

# 主窗口布局
main_layout = QVBoxLayout(window)
main_layout.addWidget(sidebar_frame)

window.show()
sys.exit(app.exec_())

方法2:自定义复合控件(适配灵活排版)

如果需要图片与复选框有更个性化的排版(比如图片在文字下方、单独占据一侧等),可以将QCheckBox和QLabel组合成自定义控件。

示例代码

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QCheckBox, QFrame, QHBoxLayout, QLabel)
from PyQt5.QtGui import QPixmap

class ImageCheckBox(QWidget):
    def __init__(self, text, image_path, parent=None):
        super().__init__(parent)
        # 水平布局:图片 + 复选框
        layout = QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        
        # 图片标签(缩放至合适尺寸)
        img_label = QLabel()
        img_label.setPixmap(QPixmap(image_path).scaled(32, 32))
        layout.addWidget(img_label)
        
        # 复选框
        self.checkbox = QCheckBox(text)
        layout.addWidget(self.checkbox)
        
    # 对外暴露复选框状态的获取/设置方法
    def isChecked(self):
        return self.checkbox.isChecked()
    
    def setChecked(self, state):
        self.checkbox.setChecked(state)

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("自定义带图片的复选框侧边栏")

sidebar_frame = QFrame()
sidebar_frame.setFrameShape(QFrame.StyledPanel)
layout = QVBoxLayout(sidebar_frame)

# 添加自定义图片复选框到侧边栏
layout.addWidget(ImageCheckBox("编程", "26.png"))
layout.addWidget(ImageCheckBox("设计", "26.png"))
layout.addWidget(ImageCheckBox("写作", "26.png"))

main_layout = QVBoxLayout(window)
main_layout.addWidget(sidebar_frame)

window.show()
sys.exit(app.exec_())

你的代码问题说明

你原来的代码将QCheckBox和QLabel分别添加到布局中,导致两者是独立控件,没有形成“带图片的复选框”整体。如果要基于你的思路修改,需要将QLabel设为QCheckBox的子控件并调整内部布局,但更推荐上面两种规范的实现方式。

内容的提问来源于stack exchange,提问作者Rimuto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:30:53