QTextEdit.find () не работает в Python - PullRequest
3 голосов
/ 06 июля 2011

Простой код, демонстрирующий проблему:

#!/usr/bin/env python

import sys
from PyQt4.QtCore import QObject, SIGNAL
from PyQt4.QtGui import QApplication, QTextEdit

app = QApplication(sys.argv)

def findText():
    print(textEdit.find('A'))

textEdit = QTextEdit()
textEdit.show()
QObject.connect(textEdit, SIGNAL('textChanged()'), findText)
sys.exit(app.exec_())

После ввода 'A' в окне, find('A') по-прежнему возвращает False.

В чем проблема?

1 Ответ

3 голосов
/ 06 июля 2011

Проблема заключается в положении курсора в окне.

По умолчанию - если вы не укажете некоторые флажки , которые будут переданы в функцию find(), поиск будет выполняться только вперед (= от позиции курсора и далее).

Для того, чтобы ваш тест работал, вы должны сделать что-то вроде этого:

  1. Запустить программу.
  2. Перейдите в окно и введите BA
  3. Переместите курсор в начало строки
  4. Введите C

Таким образом, в окне вы получите строку CBA с курсором между C и B и строку, с которой будет работать метод find(), возвращающий True будет BA.

В качестве альтернативы вы можете протестировать эту другую версию вашего кода, для которой установлен флаг обратного хода.

#!/usr/bin/env python
# -*- coding: utf-8  -*-

import sys
from PyQt4.QtCore import QObject, SIGNAL
from PyQt4.QtGui import QApplication, QTextEdit, QTextDocument

app = QApplication(sys.argv)

def findText():
    flag = QTextDocument.FindBackward
    print(textEdit.toPlainText(), textEdit.find('A', flag))

textEdit = QTextEdit()
textEdit.show()
QObject.connect(textEdit, SIGNAL('textChanged()'), findText)
sys.exit(app.exec_())
...