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

如何使用QPixmap和QLabel实现可选中复制的图片展示功能?

PyQt5 QLabel图片右键复制实现方案

核心逻辑是自定义支持右键操作的QLabel子类,自行实现右键菜单和系统剪贴板写入逻辑,完全可以达到和Word中图片复制一致的效果,修改后的完整可运行代码如下:

import sys
import PyQt5
from PyQt5.QtWidgets import (
    QLabel, QVBoxLayout, QWidget, QMenu, QApplication
)
from PyQt5 import QtCore
from PyQt5.QtGui import QPixmap, QPalette, QColor
from PyQt5.QtCore import QSize, Qt

# 自定义支持右键复制图片的QLabel子类
class CopyableImageLabel(QLabel):
    def __init__(self, parent=None):
        super().__init__(parent)
        # 可选:添加选中高亮效果,点击图片时显示边框
        self.setAutoFillBackground(True)
        self.is_selected = False
        self.update_selected_style()

    def update_selected_style(self):
        palette = self.palette()
        if self.is_selected:
            # 选中时显示半透明蓝色背景,可自行调整颜色参数
            palette.setColor(QPalette.Window, QColor(0, 120, 215, 80))
        else:
            palette.setColor(QPalette.Window, Qt.transparent)
        self.setPalette(palette)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.is_selected = not self.is_selected
            self.update_selected_style()
        super().mousePressEvent(event)

    def contextMenuEvent(self, event):
        # 仅当前Label加载了图片时才弹出复制菜单
        if self.pixmap() is None:
            return
        # 创建右键菜单
        menu = QMenu(self)
        copy_action = menu.addAction("复制图片")
        action = menu.exec_(self.mapToGlobal(event.pos()))
        if action == copy_action:
            # 将当前显示的图片写入系统剪贴板
            clipboard = QApplication.clipboard()
            clipboard.setPixmap(self.pixmap())

class Display_Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(QSize(980,700))
        self.layout = QVBoxLayout(self)
        # 替换为自定义的可复制图片Label
        self.label1 = CopyableImageLabel(self)
        # 替换为你本地的图片路径
        path_to_my_image = "your_image.png"
        self.pixmap = QPixmap(path_to_my_image)
        self.pixmap = self.pixmap.scaled(900, 900, QtCore.Qt.KeepAspectRatio)
        self.label1.setPixmap(self.pixmap)
        self.label1.resize(self.pixmap.width(), self.pixmap.height())
        self.layout.addWidget(self.label1)

if __name__ == "__main__":
    app = PyQt5.QtWidgets.QApplication(sys.argv)
    MainWindow = Display_Window()
    MainWindow.show()
    app.exec_()

关键逻辑说明

  • 自定义的CopyableImageLabel类重写了右键菜单事件,右键点击时会弹出「复制图片」选项,点击后直接将当前Label显示的QPixmap写入系统剪贴板,支持粘贴到任意外部应用
  • 可选添加了左键点击选中高亮效果,和Word选中图片的视觉效果一致,不需要可以删除mousePressEvent和update_selected_style相关代码
  • 如果需要支持多图片展示,只需要实例化多个CopyableImageLabel添加到布局中即可,每个图片的复制逻辑相互独立

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:00:04