1

QTextEditフィールドにテキストを印刷しようとしていますが、何らかの理由で画像が最初に表示されます。

これが私のコードです:

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)挿入が完了するとカーソルが非表示になるように、どのコードを使用する必要がありますか?

4

1 に答える 1

3

画像を挿入する場所にカーソルを置く必要があります。このコードをチェックアウトしてください:

#!/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_())
于 2013-03-21T06:04:26.067 に答える