gpt4 book ai didi

python - QSyntaxHighlighter 显示问题

转载 作者:行者123 更新时间:2023-12-01 07:29:59 25 4
gpt4 key购买 nike

我正在为软件中的文档编写一个搜索栏。问题是:仅在我手动调整窗口大小(例如通过拖动一个角)后才会出现突出显示。

该文档是在 QTextDocument 中的 html 格式,我使用 QSyntaxHighlighter 来突出显示与搜索栏匹配的所有单词。

我尝试调整程序内的 QMainWindow 和 QWidget 的大小,但没有成功。

from PySide2 import QtCore, QtWidgets, QtGui
import sys


class WindowVocabulary(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.set_ui()

def set_ui(self):
self.w = PageHtml('voca.html')
self.setCentralWidget(self.w)
#Eléments
self.dock = QtWidgets.QDockWidget()
self.dock.setAllowedAreas(QtCore.Qt.TopDockWidgetArea)
w_dock = QtWidgets.QWidget()
line = QtWidgets.QLineEdit()
#Layout
h = QtWidgets.QHBoxLayout()
v = QtWidgets.QVBoxLayout()
v.addWidget(line)
w_dock.setLayout(v)
self.dock.setWidget(w_dock)
self.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.dock)
#Actions
line.textChanged.connect(self.w.recherche)


class SearchHighLight(QtGui.QSyntaxHighlighter):
def __init__(self, doc):
super().__init__(doc)
self.m_pattern = QtCore.QRegularExpression()
self.m_pattern.setPatternOptions(QtCore.QRegularExpression.CaseInsensitiveOption)
self.m_format = QtGui.QTextCharFormat()
self.m_format.setBackground(QtCore.Qt.green)

def highlightBlock(self, text):
matchIterator = self.m_pattern.globalMatch(text)
while(matchIterator.hasNext()):
match = matchIterator.next()
self.setFormat(match.capturedStart(), match.capturedLength(), self.m_format)

def searchText(self, text):
self.m_pattern.setPattern(text);
self.rehighlight()


class PageHtml(QtWidgets.QWidget):
def __init__(self, path):
super().__init__()
self.set_ui(path)

def set_ui(self, path):
self.d = QtGui.QTextDocument()
self.d.setHtml(open(path, encoding="utf-8").read())
self.m_searchHighLight = SearchHighLight(self.d)

def paintEvent(self, event):
p = QtGui.QPainter()
p.begin(self)
self.d.drawContents(p)
p.end()

def recherche(self, word):
word = word.replace(' ', '')
word = word.replace('\n', '')
if len(word) >= 3 :
self.m_searchHighLight.searchText(word)


app = QtWidgets.QApplication(sys.argv)
fen = WindowVocabulary()
fen.showMaximized()
sys.exit(app.exec_())

我想要实时亮点。

最佳答案

您必须调用update()方法来重新绘制小部件,还建议您传递一个空字符串,以便在必要时清除突出显示。

def recherche(self, word):
word = word.replace(" ", "").replace("\n", "")
self.m_searchHighLight.searchText(word if len(word) >= 3 else "")
self.update()

关于python - QSyntaxHighlighter 显示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57252893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com