2013-03-21 36 views
1

我想將文本打印到QTextEdit字段中,但由於某種原因圖像首先顯示。在QTextEdit中插入字符串後的QImage

這裏是我的代碼:

import sys 
from PyQt4 import QtCore, QtGui 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self): 

     textEdit = QtGui.QTextEdit('',self) 
     textEdit.setGeometry(QtCore.QRect(300, 300, 640, 480)) 
     textEdit.move(0, 0) 
     self.setGeometry(300, 300, 640, 480) 

     img = QImage('image.png','PNG') 

     cursor = QTextCursor(textEdit.document()) 
     cursor.insertText("Hello World") 
     cursor.insertImage(img) 

     self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

它看起來像這樣在我的QTextEdit領域:

some image 
Hello World 

但我希望它看起來像:

Hello World 
some image 

的圖像是在字符串的頂部。此外,還有一個很大的難看的光標像我的圖像一樣高(500像素高)。我應該使用哪些代碼a)字符串在圖像之前打印,b)插入完成後光標是否隱藏?

回答

2

您需要將光標放在要插入圖像的位置。結帳此代碼:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from PyQt4 import QtGui, QtCore 

class MyWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(MyWindow, self).__init__(parent) 

     self.pushButtonImage = QtGui.QPushButton(self) 
     self.pushButtonImage.setText("Insert Image!") 
     self.pushButtonImage.clicked.connect(self.on_pushButtonImage_clicked) 

     self.textEditImage = QtGui.QTextEdit(self) 
     self.textEditImage.setPlainText("Insert an image here:") 

     self.layoutVertical = QtGui.QVBoxLayout(self) 
     self.layoutVertical.addWidget(self.pushButtonImage) 
     self.layoutVertical.addWidget(self.textEditImage) 

    def on_pushButtonImage_clicked(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.textEditImage.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.textEditImage.textCursor() 
     textCursor.movePosition(
      QtGui.QTextCursor.End, 
      QtGui.QTextCursor.MoveAnchor 
     ) 
     textCursor.insertImage(imageFormat) 

     # This will hide the cursor 
     blankCursor = QtGui.QCursor(QtCore.Qt.BlankCursor) 
     self.textEditImage.setCursor(blankCursor) 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('MyWindow') 

    main = MyWindow() 
    main.show() 

    sys.exit(app.exec_()) 
+0

這似乎不適用於我。我使用的圖像是正方形600 x 600像素。 http://commons.wikimedia.org/wiki/File:Happy_smiley_face.png – Paul 2013-03-21 06:16:52

+0

我剛剛將字符串更改爲「在此處插入圖片\ n」。它現在有效! – Paul 2013-03-21 06:19:44

+0

好的! :)這可能是因爲小部件的大小,你也可以在插入圖像之前調整它的大小。 – 2013-03-21 06:24:29