3

演示问题的简单代码:

#!/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

问题出在哪里?

4

1 回答 1

4

问题是光标在窗口中的位置。

默认情况下 - 除非您指定一些要传递给函数的标志find(),否则搜索只会向前进行(= 从光标位置开始)。

为了使您的测试工作,您应该执行以下操作:

  1. 运行程序。
  2. 转到窗口并输入BA
  3. 将光标移动到行首
  4. 类型C

这样,您将在窗口中看到字符串CBA,光标位于C和之间,方法将返回B的字符串将是.find()TrueBA

或者,您可以测试设置了向后标志的其他版本的代码。

#!/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_())
于 2011-07-06T08:23:31.787 回答