2012-01-05 5 views
0

QtextEditボックス(ref PyQt - How to turn on/off spellchecking)でスペルチェックの強調表示を設定/解除するボタンがあります。PyQt - スペルチェックのハイライトをオン/オフにする方法

言語選択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() 

ですボタンをクリックしても、言語を選択する際に何も起こりません(これは、入力を開始した後にのみ発生します。コンボボックスの選択に敏感ですか?)ありがとうございました。

答えて

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

私はそれを試してみましょう。しかし、私が言ったように、ボタンを押すと再ハイライト()がなくてもうまく動作します。私はコンボボックスの変更がまったく同じ方法を使用する場合、なぜ動作しないのか理解できません。 – linuxoid

+0

はい、コンボボックスで言語を変更すると動作します。どうもありがとうございました。 – linuxoid