さまざまなログ データを含む TextCtrl があります。また、ユーザーが検索する文字列を検索できる EditText フィールドもあり、[検索] ボタンをクリックして、ログに単語が見つかった場合はその単語を見つけて強調表示します。ブラウザ/メモ帳などでの標準の検索/ハイライト。
私が持っているコードは既に機能しており、ユーザーの言葉をうまく強調していますが、実装したいいくつかのビットが欠けています:
同じ単語を検索し、次の単語を強調表示する機能 (「次を検索」編集など):これは、以下のコードで「次を検索」ボタンを追加することで解決されました。カウントは、次のハイライトをログの最後までではなく、1 ワードに制限します。- 同じ単語でも新しい単語でも、新しい単語が検索されたときに現在の単語の強調表示を解除します
新しい単語を検索する場合は、位置を 0 (データの先頭) から開始します。編集:findTxt
def内の startPos 値をリセットすることで解決します。def findTxt(self,e): global wordPos newstring = self.logTxt.GetValue() for i in range(self.progressBox.GetNumberOfLines()): line = self.progressBox.GetLineText(i) if newstring in line: startPos = self.progressBox.GetValue().find(newstring) endPos = startPos + len(newstring) wordPos = endPos self.progressBox.Bind(wx.EVT_SET_FOCUS, self.highlightText(startPos, endPos)) startPos = 0 self.findNextBtn.Enable() def findNext(self,e): global wordPos newstring = self.logTxt.GetValue() count = 0 for i in range(self.progressBox.GetNumberOfLines()): if count == 0: line = self.progressBox.GetValue() if newstring in line: startPos = self.progressBox.GetValue().find(newstring, wordPos) endPos = startPos + len(newstring) wordPos = endPos self.progressBox.Bind(wx.EVT_SET_FOCUS, self.highlightText(startPos, endPos)) count = 1 def highlightText(self, pos, size): self.progressBox.SetStyle(pos, size, wx.TextAttr("black", "turquoise")) self.progressBox.SetInsertionPoint(pos)