簡體   English   中英

如何以txt或rtf格式顯示自定義python QTextEdit效果(如下划線)?

[英]How to display custom python QTextEdit effects like underline in txt or rtf format?

我遇到一個問題,當我將QTextEdit中的文本另存為txt或rtf時,它不會保存下划線和字體大小之類的內容。 這是代碼:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

import gi
import signal
gi.require_version('Gtk', '3.0')
import sys
import dbus
import pygtk
import gi
import signal
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import pyqtSlot
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView

import sip
sip.setapi('QString', 2)
sip.setapi('QVariant', 2)

gi.require_version('Notify', '0.7')


try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(679, 600)

        self.underlined = False
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

        self.saveButton = QtGui.QPushButton(self.centralwidget)
        self.saveButton.setGeometry(QtCore.QRect(10, 0, 88, 28))
        self.saveButton.setObjectName(_fromUtf8("pushButton"))

        self.textEdit = QtGui.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(0, 30, 681, 800))
        self.textEdit.setObjectName(_fromUtf8("textEdit"))

        self.fontButton = QtGui.QPushButton(self.centralwidget)
        self.fontButton.setGeometry(QtCore.QRect(400, 0, 88, 28))
        self.fontButton.setObjectName(_fromUtf8("fontButton"))

        self.fontSize = QtGui.QLineEdit(self.centralwidget)
        self.fontSize.setGeometry(QtCore.QRect(100, 0, 28, 28))
        self.fontSize.setObjectName(_fromUtf8("fontEdit"))
        self.fontSize.returnPressed.connect(self.fontButton.click)

        self.underlineButton = QtGui.QPushButton(self.centralwidget)
        self.underlineButton.setGeometry(QtCore.QRect(130, 0, 28, 28))
        self.underlineButton.setObjectName(_fromUtf8("underlineButton"))

        self.disableUnderlineButton = QtGui.QPushButton(self.centralwidget)
        self.disableUnderlineButton.setGeometry(QtCore.QRect(160, 0, 28, 28))
        self.disableUnderlineButton.setObjectName(_fromUtf8("disableUnderlineButton"))


        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 679, 24))
        self.menubar.setObjectName(_fromUtf8("menubar"))

        self.menuTest = QtGui.QMenu(self.menubar)
        self.menuTest.setObjectName(_fromUtf8("menuTest"))
        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menuTest.menuAction())

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

        def save(self):
            with open('log.rtf', 'w') as yourFile:
                yourFile.write(str(self.textEdit.toPlainText()))

        def saveFont(self):
            self.textEdit.setFontPointSize(int(self.fontSize.text()))

        def underline(self):
            self.textEdit.setFontUnderline(True)

        def disableUnderline(self):
            self.textEdit.setFontUnderline(False)

        def commander(self):
            save(self)
        self.textEdit.setHtml('<u>hi</u>')
        self.saveButton.clicked.connect(lambda: save(self))
        self.fontButton.clicked.connect(lambda: saveFont(self))
        self.underlineButton.clicked.connect(lambda: underline(self))
        self.disableUnderlineButton.clicked.connect(lambda: disableUnderline(self))




    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.saveButton.setText(_translate("MainWindow", "Save text", None))
        self.fontButton.setText(_translate("MainWindow", "Save Font", None))
        self.menuTest.setTitle(_translate("MainWindow", "test", None))
        self.underlineButton.setText(_translate("MainWindow", "Uon", None))
        self.disableUnderlineButton.setText(_translate("MainWindow", "Uoff", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我嘗試使用HTML和其他格式修復此問題,但無法使其正常工作。

這是因為您要使用toPlainText將文本轉換為純文本 ,其中不包含任何格式信息。

yourFile.write(str(self.textEdit.toPlainText()))

如果要保留格式,則需要使用toHtml

yourFile.write(str(self.textEdit.toHtml()))

請注意,這與rtf 它甚至還不是完全標准的HTML,如果您嘗試在除QTextEdit之外的另一個HTML查看器中查看它,則顯示的內容可能會有所不同。 以我的經驗,從QTextEdit生成的HTML非常丑陋,並且只有計划在QTextEdits顯示它時,它才能很好地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM