PyQt - 如何打开/关闭拼写检查突出显示

时间:2012-01-05 03:05:01

标签: python pyqt spell-checking

我有一个按钮,可以在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()

如何在点击按钮时设置/取消设置荧光笔,但在选择语言时没有任何反应(仅在我开始输入后才发生,而不是立即在组合框选择中)?谢谢。

1 个答案:

答案 0 :(得分:1)

如果您查看HighLighter.setDict方法,您会发现除了重新分配dict属性之外,它没有做太多其他事情。

此外,SpellTextEdit.setHighlighterEnabled仅重置文档。

因此,只要dict发生变化,您就需要一种方法来重新突出显示该文本。幸运的是,HighLighterQSyntaxHighlighter的子类,它已经有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:
        ...