【发布时间】:2020-02-13 07:47:06
【问题描述】:
我是关注a tutorial 的新手 PyQt5 用户,我很困惑如何扩展下面的示例代码。
两个处理程序canInsertFromMimeData 和insertFromMimeData 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