2016-03-31 9 views
0

QTextEdit()へのエンチャントスペルチェックの実装に問題があります。 私が試してみてください。構文ハイライト付きPyQt4スペルチェック

from enchant.checker import SpellChecker 
chkr = SpellChecker("en_US") 
chkr.set_text(self.text.toPlainText()) 

そして私はQTextEditでこれを使用するcan`t?これをself.textと一緒に使う方法は?私が正しくあなたの質問を理解していれば

答えて

0

あなたはちょうどこのような何かをする必要があります。

from PyQt4 import QtGui 
from enchant.checker import SpellChecker 
import re 
import sys 

class Main(QtGui.QMainWindow): 

    def __init__(self, parent = None): 
     QtGui.QMainWindow.__init__(self,parent) 
     self.initUI() 

    def initToolbar(self): 
     self.spellcheckAction = QtGui.QAction(QtGui.QIcon("icons/logo.png"),"Spellcheck",self) 
     self.spellcheckAction.setStatusTip("Spell Check document") 
     self.spellcheckAction.setShortcut("Ctrl+S") 
     self.spellcheckAction.triggered.connect(self.spellcheckHandler) 
     self.toolbar = self.addToolBar("Options") 
     self.toolbar.addAction(self.spellcheckAction) 

    def initUI(self): 
     self.text = QtGui.QTextEdit(self) 
     self.initToolbar() 
     self.text.setTabStopWidth(33) 
     self.setCentralWidget(self.text) 
     self.setGeometry(100,100,1030,800) 
     self.setWindowTitle("Writer") 
     self.setWindowIcon(QtGui.QIcon("icons/icon.png")) 

    def spellcheckHandler(self): 
     chkr = SpellChecker("en_US") 
     s = str(self.text.toPlainText()) 
     chkr.set_text(s) 
     for err in chkr: 
      self.replaceAll(err.word) 

    def find(self, query): 
     text = self.text.toPlainText() 
     query = r'\b' + query + r'\b' 
     flags = 0 
     pattern = re.compile(query,flags) 
     start = self.lastMatch.start() + 1 if self.lastMatch else 0 
     self.lastMatch = pattern.search(text,start) 
     if self.lastMatch: 
      start = self.lastMatch.start() 
      end = self.lastMatch.end() 
      self.moveCursor(start,end) 
     else: 
      self.text.moveCursor(QtGui.QTextCursor.End) 

    def replace(self): 
     cursor = self.text.textCursor() 
     if self.lastMatch and cursor.hasSelection(): 
      self.text.setTextBackgroundColor(QtGui.QColor(0,255,0)) 
      self.text.setTextCursor(cursor) 

    def replaceAll(self, query): 
     self.lastMatch = None 
     self.find(query) 
     while self.lastMatch: 
      self.replace() 
      self.find(query) 

    def moveCursor(self,start,end): 
     cursor = self.text.textCursor() 
     cursor.setPosition(start) 
     cursor.movePosition(QtGui.QTextCursor.Right,QtGui.QTextCursor.KeepAnchor,end - start) 
     self.text.setTextCursor(cursor) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    main = Main() 
    main.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 

取得するために提案はあなたが答えを

chkr.suggest(err.word). 
+1

非常に感謝ダン-DEVを使用します! –

関連する問題