在QTextEdit窗口中选择文本并使用setTextBackgroundColor

时间:2018-06-02 13:21:50

标签: python pyqt pyqt4 pyqt5

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

import sys
from PyQt4 import QtGui, QtCore

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

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

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窗口中选择的文本。

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

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()

可能是我使用的类/方法不合适或者我对它们的实现是错误的。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

You have to set a new QTextCharFormat to the QTextCursor of the QTextEdit:

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())