2011-07-06 53 views
2

簡單的代碼演示問題:QTextEdit.find()不會在Python工作

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

問題在哪裏?

回答

2

問題是光標在窗口中的位置。

默認情況下 - 除非你指定一些flags要傳遞給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_())