2012-01-05 33 views
0

我有一個按鈕,它設置/取消突出顯示在QTextEdit框中的拼寫檢查(參考PyQt - How to turn on/off spellchecking),它工作正常。PyQt - 如何打開或關閉拼寫檢查突出顯示

然後我添加了一個語言選擇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

如果你看看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: 
     ... 
+0

我想試試。但正如我所說,即使沒有rehighlight()按鈕時,它也能正常工作。我不明白爲什麼組合框更改不起作用,如果它使用完全相同的方法? – linuxoid 2012-01-05 23:37:15

+0

是的,現在當我在組合框中更改語言時,它就可以工作。非常感謝你。 – linuxoid 2012-01-05 23:41:58