【问题标题】:How to paste image from clipboard into PyQT5 Document?如何将剪贴板中的图像粘贴到 PyQT5 文档中?
【发布时间】:2020-02-13 07:47:06
【问题描述】:

我是关注a tutorial 的新手 PyQt5 用户,我很困惑如何扩展下面的示例代码。

两个处理程序canInsertFromMimeDatainsertFromMimeData Qt5 方法接受拖放到document 上的图像mime 数据类型(效果很好)。它们都接收一个接收 QMimeData 对象的信号参数源。

但是,如果我尝试将从 Windows 剪贴板复制的图像粘贴到文档中,它只会崩溃,因为没有处理程序。

https://doc.qt.io/qt-5/qmimedata.html 搜索 Qt5 文档只会让我更加困惑,因为我不是 C++ 程序员,而且我使用 Python 3.x 和 PyQt5 来执行此操作。

如何编写处理程序以允许将复制到剪贴板的图像直接粘贴到文档中?

    class TextEdit(QTextEdit):

    def canInsertFromMimeData(self, source):

        if source.hasImage():
            return True
        else:
            return super(TextEdit, self).canInsertFromMimeData(source)

    def insertFromMimeData(self, source):

        cursor = self.textCursor()
        document = self.document()

        if source.hasUrls():

            for u in source.urls():
                file_ext = splitext(str(u.toLocalFile()))
                if u.isLocalFile() and file_ext in IMAGE_EXTENSIONS:
                    image = QImage(u.toLocalFile())
                    document.addResource(QTextDocument.ImageResource, u, image)
                    cursor.insertImage(u.toLocalFile())

                else:
                    # If we hit a non-image or non-local URL break the loop and fall out
                    # to the super call & let Qt handle it
                    break

            else:
                # If all were valid images, finish here.
                return


        elif source.hasImage():
            image = source.imageData()
            uuid = hexuuid()
            document.addResource(QTextDocument.ImageResource, uuid, image)
            cursor.insertImage(uuid)
            return

        super(TextEdit, self).insertFromMimeData(source)

代码来源:https://www.learnpyqt.com/examples/megasolid-idiom-rich-text-editor/

【问题讨论】:

    标签: python-3.x pyqt5 qt5


    【解决方案1】:

    我和你的处境完全一样。我也是 Python 新手,所以可能会有错误。

    document.addResource(QTextDocument.ImageResource, uuid, image) 中的变量 uuid 不起作用。它应该是一个路径 -> QUrl(uuid)。 现在您可以插入图像。但是,由于剪贴板中图像的路径正在更改,因此最好使用不同的路径,例如您还保存文件的目录。

    还要注意用户在保存时必须选择文件类型(.html)

    对于我自己的项目,我将把文件打印为 pdf。这样你就不必担心图像的路径^-^

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多