【问题标题】:PyQt - How to turn on/off spellcheck highlightingPyQt - 如何打开/关闭拼写检查突出显示
【发布时间】:2012-01-06 02:54:01
【问题描述】:

我有一个按钮,可以在 QTextEdit 框中设置/取消设置拼写检查突出显示(参考 PyQt - How to turn on/off spellchecking),效果很好。

然后我添加了一个语言选择 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()

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

【问题讨论】:

    标签: python pyqt spell-checking


    【解决方案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:
            ...
    

    【讨论】:

    • 我会试试的。但正如我所说,当我按下按钮时,即使没有 rehighlight() 它也能正常工作。我不明白如果组合框更改使用完全相同的方法,为什么它不起作用?
    • 是的,当我在组合框中更改语言时,它现在可以工作了。非常感谢。
    猜你喜欢
    • 2012-02-02
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2015-02-14
    • 2010-09-25
    相关资源
    最近更新 更多