Ich habe eine TextCtrl, die verschiedene Protokolldaten enthält, ich habe auch ein EditText-Feld, in dem der Benutzer nach einer Zeichenfolge suchen kann, und klicken Sie dann auf die Schaltfläche Suchen, um das Wort zu finden und zu markieren ist in den Protokollen gefunden. Ihre Standardsuche/highlight in Browser/Notepad usw.Python TextCtrl Such- und Highlight-Funktionalität
Der Code Ich habe bereits funktioniert und zeigt erfolgreich das Wort des Benutzers, aber es gibt ein paar Bits fehlen, dass ich implementieren möchte:
-
Die Fähigkeit, das gleiche Wort zu suchen, und das nächste Wort hervorgehoben zu haben, z. B. ein 'Find Next'EDIT: Dies wurde durch Hinzufügen einer 'Find Next' Schaltfläche mit dem folgenden Code gelöst. Der Zähler begrenzt das nächste Highlight auf 1 Wort und nicht alle bis zum Ende des Protokolls. - das aktuelle Wort Un-Highlight, wenn ein neues Wort gesucht wird, ist es das gleiche Wort sein, oder ein neues Wort
Starten Sie die Position auf 0 (oben auf der Daten), wenn ein neues WortEDIT Suche : gelöst, indem im Inneren desfindTxt
defdef 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)