关于#python# QTextEdit文本格式问题

我在家里的电脑上使用pyqt5设计的QTextEdit 富文本框,从word文档中复制到QTextEdit中时,可以保持word中的原格式,但是打包后在办公室的电脑上无法显示word中的原格式,没有了缩进且行间距变大。然后我就在办公室的电脑上重新设计了QTextEdit 富文本框,依然无法保持粘贴来得原格式,但是打包后在家里的电脑上可以显示原格式,不知道什么原因造成的。谁可以帮我分析一一下啊?

import sys

# Form implementation generated from reading ui file 'untitled.ui'
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/887868534786179.png "#left")

#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QWidget


class Ui_Form(QWidget):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(865, 664)
        self.textEdit = QtWidgets.QTextEdit(Form)
        self.textEdit.setGeometry(QtCore.QRect(160, 290, 541, 261))
        self.textEdit.setObjectName("textEdit")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

class MyWindow(Ui_Form):
    def __int__(self):
        super().__init__()


app = QtWidgets.QApplication(sys.argv)
myWindow = MyWindow()
myWindow.setupUi(myWindow)
myWindow.retranslateUi(myWindow)

myWindow.show()

sys.exit(app.exec_())

img

出现这种情况的原因可能是因为不同的电脑上所使用的字体、字号和行距等设置不同,导致对文本的显示效果产生差异。以下是几个可能导致问题的原因和解决方案:
1.不同电脑字体设置不一致
字体是文本显示的基本元素之一,不同电脑字体设置不一致可能导致文本在不同电脑上显示效果不同。你可以在程序中设置所使用的字体和字号,这样可以确保在不同电脑上文本的显示效果基本一致。可以尝试在应用程序运行时使用Windows字体,因为它们可以在大多数Windows计算机上使用,并且通常都是预装的。
2.不同电脑的行距设置不一致
行距也可能影响文本的显示效果,你可以在程序中设置所使用的行距,以确保在不同电脑上文本的显示效果基本一致。可以设置标准的行距和段落距离,确保在不同的eUI上显示的效果相同。
3. 复制Word文本时包含了Word中的额外样式
Word 文档中往往包含了各种样式,例如段落样式、字符样式等等,这些样式可能会影响文本的显示效果。可以尝试在复制Word文本时只复制所需内容,并在粘贴时选择“无格式文本”以避免一些复制时带上的额外样式。
另外,可能导致问题的其他因素也可能存在,例如字符编码、操作系统、Python和 PyQt 版本等等。你可以尝试检查这些因素是否有所不同,并作出相应的调整。

基于new bing部分指引作答:
要修改代码以实现更好的富文本格式支持,请尝试以下更改:

1、导入所需的模块和类:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication

2、修改类定义:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(865, 664)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(160, 290, 541, 261))
        self.textEdit.setObjectName("textEdit")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Form"))


class MyWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

3、修改应用程序的创建和运行部分:

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    sys.exit(app.exec_())

通过这些修改,您应该能够在不同的电脑上正确显示并保持富文本框的原格式。记得在两台电脑上安装相同版本的PyQt5,并检查所使用的字体和样式是否在两台电脑上都可用。

TechWhizKid参考GPT回答:

  • 可能的原因以及相应的解决方案:
  1. 环境差异:家里和办公室的电脑可能存在环境差异,如不同的操作系统,不同的Python版本,不同的PyQt版本等。这些差异可能会影响到QTextEdit的表现。要确保两台电脑的环境尽可能一致,包括安装的软件版本等。
  2. 字体问题:可能是字体导致的,不同电脑上可能安装的字体不同,或者某些字体在特定电脑上不存在。你可以尝试设置QTextEdit的字体,看是否能解决问题。
  3. 样式表:Qt 允许你使用样式表 (stylesheet) 来自定义控件的外观,你可以试试看在代码中为 QTextEdit 设置一个统一的样式表。
  4. 打包问题:是否用了相同的方式和配置来打包应用?不同的打包工具和打包参数可能会导致打包出的应用行为不一致。如果可能可以在办公室的电脑上使用和家里相同的打包方式。
  5. 运行时依赖问题:你打包的应用可能有一些运行时的依赖,比如系统库或者其他 Python 库。这些依赖在打包的时候可能没有全部包含进去,导致在不同的电脑上运行的时候表现不一致。你可以尝试使用工具来检查你的应用是否有缺失的依赖。
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7526572
  • 除此之外, 这篇博客: PyQt5随笔:QTextEdit、QTextBrowser添加的文字超出视图后,滑动条自动移至最底部,显示最新文本解决中的 搭配一定函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 虽然insertPlainText()显示多次输入文本时,滑动条是在顶部的。

    但通过insertPlainText()搭配一定函数也可以实现滑动条始终在底部,实现显示最新输出文本。同时,append()搭配一定函数也可以实现滑动条始终在顶部。这样可以实现更加复杂的程序设计。

    def show_text(self):
        a = '*'
        for i in range(1,50):
            text = '第' + str(i) + '次输入内容' + a * i + '\n'
            self.textEdit.insertPlainText(text)
            self.textEdit.moveCursor(QTextCursor.End)  # Start -> 位于顶部,
            # self.textEdit.verticalScrollBar().setValue(self.textEdit.verticalScrollBar().maximum())  # minimun() -> 位于顶部
    

    有两种函数开始和insertPlainText()搭配,一是self.textEdit.moveCursor(QTextCursor.End),把光标置于底部

    二是self.textEdit.verticalScrollBar().setValue(self.textEdit.verticalScrollBar().maximum()),直接把滑动条始终最大值,即底部

    结果:

    image-20200727111159232




  • 以下回答由chatgpt基于相关博客总结生成:

    作为一名AI语言模型,我无法直接回答该问题,因为它需要具有现场经验的人来回答。同时,提供的参考资料中给出了一个可能有用的函数,可以帮助满足问题中的一些需求。如果您仍然需要解决问题,请参考该函数并进行实验和测试,或者寻求更具体的帮助和支持。

这个问题可能是因为你的两台电脑的默认字体不同,导致在不同的电脑上字体显示不同,进而导致缩进和行间距显示不同。

你可以通过设置 QTextEdit 的字体属性,来保持在不同电脑上的显示效果一致,例如:

from PyQt5 import QtGui

# 设置字体为 Times New Roman,大小为12
font = QtGui.QFont('Times New Roman', 12)
textEdit.setFont(font)

另外,你还可以尝试使用 QPlainTextEdit ,这个类不支持富文本,但是他可以确保文本的显示效果一致。

问题点: 办公室的电脑在执行操作:word文档中复制到QTextEdit中时,没有保持word中的原格式.
处理思路:
①先确认复制内容到新word文档(空白文档)时, 是否带上格式? 如果没有,设置一下word文档
②检查QTextEdit有没有格式化文本?

十分感谢大家的帮助,其他的回答也比较接近,但是可惜只能采纳一个最佳答案。最终原因找到了,因为家里的电脑和办公室电脑Word的设置不同,家里的电脑中的文本是从之前发的邮件系统中复制到Word中的,可能是邮件系统对文本格式做了处理,所以家里的Word中文本换行都是“软换行”,就是一个向下的箭头,QTextEdit将整段文本作为一段

处理了,保持了原来的格式,但是办公室的Word中的文本是我手动输入的,换行都是硬换行,就是带拐弯的箭头符号,QTextEdit将每一行都作为一个

处理,导致行距增大,没有保持原来的样式。再次感谢大家的回答

关于python:pyqt中QTextEdit中的文本格式设置
可以参考下
https://www.codenong.com/25718751/