저는 여전히 파이썬과 PyQt의 초보자입니다. 정말 기본적인 질문이 있습니다. QTextEdit 위젯 내부에 부모 윈도우에 텍스트와 이미지가 있고 자식 윈도우의 QTextEdit에 모든 내용을 복사하려고합니다. 그러나 어떤 이유로 이미지를 복사 할 수 없으며 텍스트 만 이미지가 아닌 복사됩니다. 다음은 나에게 문제를주고 코드의 조각이다 :QMimeData를 다른 윈도우의 QTextEdit에 붙여 넣기
self.textEdit.selectAll()
data = self.textEdit.createMimeDataFromSelection()
self.child_window.textEdit.insertFromMimeData(data) # doesn't work with images
여기이 작은 프로그램이 그 나는 실행하려고 해요 : 프로그램이 작동
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyWindow(QtGui.QWidget):
def __init__(self,parent=None):
super(MyWindow,self).__init__(parent)
self.textEdit = QtGui.QTextEdit(self)
self.textEdit.setText("Hello World\n")
self.pushButton = QtGui.QPushButton(self)
self.pushButton.setText("Copy and paste to Child Window")
self.pushButton.clicked.connect(self.click_copy_data)
self.pushButton2 = QtGui.QPushButton(self)
self.pushButton2.setText("Insert Image")
self.pushButton2.clicked.connect(self.click_file_dialog)
self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.textEdit)
self.layoutVertical.addWidget(self.pushButton2)
self.layoutVertical.addWidget(self.pushButton)
self.setGeometry(150, 150,640, 480)
self.child_window = CustomWindow(self)
self.child_window.show()
def click_copy_data(self):
self.textEdit.selectAll()
data = self.textEdit.createMimeDataFromSelection()
self.child_window.textEdit.insertFromMimeData(data)
def click_file_dialog(self):
filePath = QtGui.QFileDialog.getOpenFileName(
self,
"Select an image",
".",
"Image Files(*.png *.gif *.jpg *jpeg *.bmp)"
)
if not filePath.isEmpty():
self.insertImage(filePath)
def insertImage(self,filePath):
imageUri = QtCore.QUrl(QtCore.QString("file://{0}".format(filePath)))
image = QtGui.QImage(QtGui.QImageReader(filePath).read())
self.textEdit.document().addResource(
QtGui.QTextDocument.ImageResource,
imageUri,
QtCore.QVariant(image)
)
imageFormat = QtGui.QTextImageFormat()
imageFormat.setWidth(image.width())
imageFormat.setHeight(image.height())
imageFormat.setName(imageUri.toString())
textCursor = self.textEdit.textCursor()
textCursor.movePosition(
QtGui.QTextCursor.End,
QtGui.QTextCursor.MoveAnchor
)
textCursor.insertImage(imageFormat)
# This will hide the cursor
blankCursor = QtGui.QCursor(QtCore.Qt.BlankCursor)
self.textEdit.setCursor(blankCursor)
class CustomWindow(QtGui.QDialog):
def __init__(self,parent=None):
super(CustomWindow,self).__init__(parent)
self.textEdit = QtGui.QTextEdit(self)
self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.textEdit)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.show()
sys.exit(app.exec_())
방법은 당신이 내부의 텍스트를 가지고있다 주 창을 누른 다음 이미지를 삽입합니다. 그런 다음 "하위 창에 복사하여 붙여 넣기"버튼을 클릭하면 이미지를 포함하여 모든 내용이 하위에 붙여 넣어 져야합니다.하지만 그 방법으로는 작동하지 않습니다. 텍스트는 복사되지만 작은 파일 아이콘이 나타납니다. 이미지가 있어야합니다.
감사합니다.
폴
이것은 이상합니다. 어떤 이유로 source.hasImage()는 True를 반환하지 않습니다. .jpg 또는 .png 파일을 사용해도. – Paul
이것은 내가 시도한 것이다 : print "has image?", data.hasImage(). 나는 틀렸다. – Paul
그 이유는 html MIME 타입이 사용되고 있기 때문입니다.'mimedata = textEdit.toHtml()'및'textEdit.setHtml (mimedata)' –