我在对 QTextEdit() 实施附魔拼写检查时遇到问题。我尝试:
from enchant.checker import SpellChecker
chkr = SpellChecker("en_US")
chkr.set_text(self.text.toPlainText())
我不能将它与 QTextEdit 一起使用?我如何将它与 self.text 一起使用?
如果我正确理解您的问题,您只需要执行以下操作:
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).