我有一个按钮,可以在QTextEdit框中设置/取消设置拼写检查突出显示(参考PyQt - How to turn on/off spellchecking),该按钮可以正常工作。
然后我添加了一个语言选择QComboBox并将其信号绑定到按钮的属性,但突出显示set / unset对改变语言不起作用。它让我疯了,我可能会做一些小而愚蠢的事情,但为了它,我发现它没有任何问题。
按钮(相反的动作)是
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()
如何在点击按钮时设置/取消设置荧光笔,但在选择语言时没有任何反应(仅在我开始输入后才发生,而不是立即在组合框选择中)?谢谢。
答案 0 :(得分:1)
如果您查看HighLighter.setDict
方法,您会发现除了重新分配dict
属性之外,它没有做太多其他事情。
此外,SpellTextEdit.setHighlighterEnabled
仅重置文档。
因此,只要dict
发生变化,您就需要一种方法来重新突出显示该文本。幸运的是,HighLighter
是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:
...