2012-01-05 5 views
0

잘 작동하는 QTextEdit 상자 (ref PyQt - How to turn on/off spellchecking)에 맞춤법 검사를 설정/해제하는 버튼이 있습니다.PyQt - 맞춤법 검사 하이라이트 기능을 켜거나 끄는 방법

그럼 언어 선택 QComboBox를 추가하고 단추의 속성에 신호를 연결했지만 강조 표시 집합/설정 해제는 언어 변경에 작동하지 않습니다. 그것은 내게 열매를 맺고, 내가 한 일은 작고 어리석은 일이 있을지 모르지만, 그걸로 나는 그것에 대해 잘못된 것을 발견 할 수 없다.

버튼은 (조치는 오히려) 콤보 상자가

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.actionSpellCheck = QAction(QIcon(self.icon_spellcheck), 
      "Auto &Spellcheck", self, 
      shortcut=Qt.CTRL + Qt.SHIFT + Qt.Key_O, 
      triggered=self.spellcheck, checkable=True) 

하고 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 슬롯이 있습니다.

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

나는 그것을 시도 할 것이다 :

그래서 당신은 다음과 같이 spellcheck 방법을 개정 할 필요가있다. 하지만 내가 말했듯이, 버튼을 누를 때 다시 하이라이트() 없이도 제대로 작동합니다. 내가 정확히 같은 방법을 사용하는 경우 콤보 박스 변경이 작동하지 않는 이유를 모르겠다. – linuxoid

+0

네, 콤보 상자에서 언어를 바꿀 때 작동합니다. 고맙습니다. – linuxoid

관련 문제