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

#
# 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_())
出现这种情况的原因可能是因为不同的电脑上所使用的字体、字号和行距等设置不同,导致对文本的显示效果产生差异。以下是几个可能导致问题的原因和解决方案:
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,并检查所使用的字体和样式是否在两台电脑上都可用。
虽然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())
,直接把滑动条始终最大值,即底部
结果:
。
。
。
。
作为一名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/