在 QTextEdit 窗口中选择文本并使用 setTextBackgroundColor 突出显示
Posted
技术标签:
【中文标题】在 QTextEdit 窗口中选择文本并使用 setTextBackgroundColor 突出显示【英文标题】:Select text in QTextEdit window and highlight using setTextBackgroundColor 【发布时间】:2018-06-02 13:21:50 【问题描述】:我通过定义以下内容创建了一个 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()
可能是我使用的类/方法不合适,或者我对它们的实现是错误的。任何帮助将不胜感激!
【问题讨论】:
为什么要在 Airframe_label 方法中创建另一个 self.textEdit? @eyllanesc 错字我的错... 将self.cursor = QtGui.QTextCursor()
更改为self.cursor = self.textEdit.cursor()
@eyllanesc 但 cursor() 不是 QTextEdit 类的方法?
对不起,试试self.cursor = self.textEdit.textCursor()
【参考方案1】:
你必须为QTextEdit
的QTextCursor
设置一个新的QTextCharFormat
:
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())
【讨论】:
如果我的回答对你有帮助别忘了标记为正确,如果你不知道怎么做我邀请你回顾tour,这是最好的感谢方式跨度>以上是关于在 QTextEdit 窗口中选择文本并使用 setTextBackgroundColor 突出显示的主要内容,如果未能解决你的问题,请参考以下文章