Я - пользователь noob PyQt5, следуя учебнику , и я не понимаю, как мне расширить пример кода ниже.
Два обработчика canInsertFromMimeData
и insertFromMimeData
Методы Qt5 принимают тип данных mime изображения, перетаскиваемый на document
(который прекрасно работает). Они оба получают источник параметров сигнала, который получает объект QMimeData.
Однако, если я пытаюсь вставить изображение, скопированное из буфера обмена Windows в документ, оно просто падает, так как для этого нет обработчика.
Поиск Документация Qt5 по адресу https://doc.qt.io/qt-5/qmimedata.html просто приводит меня к еще большей путанице, так как я не программист на 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/