PyQt - 如何开启/关闭拼写检查高亮
我有一个按钮,可以在QTextEdit框中开启或关闭拼写检查的高亮显示(参考 PyQt - 如何开启/关闭拼写检查),这个功能运行得很好。
然后我添加了一个语言选择的下拉框(QComboBox),并把它的信号连接到了按钮的属性上,但在更改语言时,高亮显示的开启和关闭功能却不起作用。这让我很烦恼,可能我做了什么小错误,但我就是找不到问题出在哪里。
这个按钮(实际上是一个动作)是
self.actionSpellCheck = QAction(QIcon(self.icon_spellcheck),
"Auto &Spellcheck", self,
shortcut=Qt.CTRL + Qt.SHIFT + Qt.Key_O,
triggered=self.spellcheck, checkable=True)
下拉框是
self.cb_lang = QComboBox(tb)
tb.addWidget(self.cb_lang)
lang_list = self.dict_broker.list_languages()
self.cb_lang.addItems(lang_list)
self.cb_lang.currentIndexChanged.connect(self.spellcheck)
而self.spellcheck是
def spellcheck(self):
pos = self.cursor.position()
if self.actionSpellCheck.isChecked():
lang = self.cb_lang.currentText()
self.dict = self.dict_broker.request_dict(lang)
self.highlighter.setDict(self.dict)
self.setHighlighterEnabled(True)
self.show_status("Spellcheck language is set to " + self.dict.tag, None)
else:
self.setHighlighterEnabled(False)
self.highlighter.setDict(None)
self.show_status("Spellcheck is turned off", None)
self.cursor.setPosition(pos, QTextCursor.MoveAnchor)
self.textEdit.setTextCursor(self.cursor)
self.textEdit.setFocus()
为什么点击按钮时高亮显示可以开启或关闭,但选择语言时却没有反应(只有在我开始输入后才会生效,而不是在下拉框选择后立即生效)?谢谢。
1 个回答
1
如果你看看 HighLighter.setDict
这个方法,你会发现它其实没做什么特别的事情,只是重新设置了 dict
这个属性。
另外,SpellTextEdit.setHighlighterEnabled
只是重置了文档而已。
所以每当 dict
发生变化时,你需要一个方法来重新高亮文本。幸运的是,HighLighter
是 QSyntaxHighlighter
的一个子类,而 QSyntaxHighlighter
已经有一个叫 rehighlight
的功能,这正好可以满足这个需求。
所以你只需要像下面这样修改你的 spellcheck
方法:
def spellcheck(self):
pos = self.cursor.position()
if self.actionSpellCheck.isChecked():
self.setHighlighterEnabled(True)
lang = self.cb_lang.currentText()
self.dict = self.dict_broker.request_dict(lang)
self.highlighter.setDict(self.dict)
self.highlighter.rehighlight()
else:
...