Некорректно отображается текст из docx в QTextEdit

Есть вот такой вот модуль:

def handleOpen(self):  # открытие
    path = QtWidgets.QFileDialog.getOpenFileName(
        self, 'Open file', '',
        'Text files(*.txt);;Html files (*.html);;Docx files (*.docx)')[0]
    if path:
        file = QtCore.QFile(path)
        if file.open(QtCore.QIODevice.ReadOnly):
            stream = QtCore.QTextStream(file)
            text = stream.readAll()
            info = QtCore.QFileInfo(path)
            if info.completeSuffix() == 'html':
                self.textEdit.setHtml(text)
            else:
                self.textEdit.setPlainText(text)
            file.close()

При открытии обычного .txt файла всё выводит красиво, но при открытии .docx файла вот такое:

https://imgur.com/kAk57BX.png


Ответы (2 шт):

Автор решения: gil9red

При открытии обычного txt файла всё выводит красиво, но при открытии docx файла вот такое:

Потому что, txt – это текстовый формат, он понятен человеку, а у docx бинарный формат. Вообще, docx это архив с файлами


Чтобы QTextEdit смог открыть docx нужно его привести в формат, который QTextEdit поймет а это или , или .

→ Ссылка
Автор решения: S. Nick

Update: Модуль QAxContainer - это расширение только для Windows

Попробуйте так:

import sys
from PyQt5.QAxContainer import QAxWidget
from PyQt5.QtWidgets import (QWidget, QGridLayout, QPushButton, QFileDialog, 
                             QMessageBox, QApplication)


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.setWindowTitle('Document Word.Application')
        self.axWidget = QAxWidget(self)

        self.buttonOpen = QPushButton('Open', self)
        self.buttonOpen.clicked.connect(self.handleOpen)

        layout = QGridLayout(self)
        layout.addWidget(self.axWidget)   
        layout.addWidget(self.buttonOpen) 

    def handleOpen(self):
        path, _ = QFileDialog.getOpenFileName(
            self, 'Выберите файл word', '', 'word(*.docx *.doc)')
        if not path:
            return

        return self.openOffice(path, 'Word.Application')   

    def openOffice(self, path, app):
        self.axWidget.clear()
        if not self.axWidget.setControl(app):
            return QMessageBox.critical(self, 'Ошибка', 'Нет установки  %s' % app)
        self.axWidget.dynamicCall(
            'SetVisible (bool Visible)', 'false')         
        self.axWidget.setProperty('DisplayAlerts', False)
        self.axWidget.setControl(path)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.resize(840, 480)
    window.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка