Select QTextEdit 中的文本 window 并使用 setTextBackgroundColor 突出显示

Select text in QTextEdit window and highlight using setTextBackgroundColor

我通过定义以下内容创建了一个 pyqt window:

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
    def __init__(self):
        super(Window,self).__init__()

在我的 GUI 中,我有一个可以导入文本的 window 和一个工具栏:

self.textEdit = QtGui.QTextEdit()
self.setCentralWidget(self.textEdit)
self.textEdit.setReadOnly(True)

MyToolBar = QtGui.QToolBar() # QToolBar is a metaclass of QMainWindow
self.addToolBar(QtCore.Qt.RightToolBarArea,MyToolBar)

我在此工具栏中有一个按钮,我希望能够通过按下该按钮来突出显示我在 QTextEdit window 中选择的文本。

我遇到的问题是定义一种方法,该方法可以跟踪选择了哪些文本,然后用我选择的颜色突出显示它。到目前为止,我有以下内容:

def Airframe_label(self):
    self.cursor = QtGui.QTextCursor() 
    self.color = QtGui.QColor()
    self.cursor.beginEditBlock()
    self.textEdit.setTextBackgroundColor(self.color.Qt.green)
    self.cursor.endEditBlock()

可能是我使用的classes/methods不合适或者我的实现方式有误。任何帮助将不胜感激!

您必须将新的 QTextCharFormat 设置为 QTextEditQTextCursor:

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
    def __init__(self):
        super(Window,self).__init__()
        self.textEdit = QtGui.QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.textEdit.setReadOnly(True)

        toolbar = QtGui.QToolBar()
        self.addToolBar(QtCore.Qt.RightToolBarArea, toolbar)
        action = toolbar.addAction("Press Me")
        action.triggered.connect(self.change_color)
        self.textEdit.append("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam ut metus diam. Donec vulputate porta libero, et hendrerit sapien sollicitudin ut. Aenean molestie sapien sit amet turpis tristique laoreet quis sed lectus. Ut sed ante arcu. Mauris vel finibus augue. Cras non malesuada dolor. Duis vel molestie ante. Pellentesque quis justo neque. Curabitur blandit auctor viverra. Vestibulum eu feugiat eros. Pellentesque at nisl ex. Morbi ornare tellus magna. Donec vel urna ac mi bibendum gravida. Integer quis interdum mauris. Aenean a metus eu felis volutpat fermentum in vitae massa.")

    def change_color(self):
        cursor = self.textEdit.textCursor()
        if cursor.hasSelection():
            fmt = QtGui.QTextCharFormat()
            fmt.setBackground(QtCore.Qt.green)
            cursor.setCharFormat(fmt)


if __name__=='__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec())