2017-06-17 1 views
0

Ich versuche, einen einfachen Texteditor mit Python zu machen. Ich versuche jetzt eine Suchfunktion zu machen. Das ist, was ich habe:Python Suche Funktion wählt eine Übereinstimmung pro Zeile

def Find(): 
    text = textArea.get('1.0', END+'-1c').lower() 
    input = simpledialog.askstring("Find", "Enter text to find...").lower() 
    startindex = [] 
    endindex = [] 
    lines = 0 
    if input in text: 
     text = textArea.get('1.0', END+'-1c').lower().splitlines() 
     for var in text: 
      character = text[lines].index(input) 
      start = str(lines + 1) + '.' + str(character) 
      startindex.append(start) 
      end = str(lines + 1) + '.' + str(character + int(len(input))) 
      endindex.append(end) 
      textArea.tag_add('select', startindex[lines], endindex[lines]) 
      lines += 1 

    textArea.tag_config('select', background = 'green') 

Dies wird erfolgreich Wörter hervorheben, die die Benutzereingabe mit einem grünen Hintergrund übereinstimmen. Aber das Problem ist, dass es nur die erste Übereinstimmung jeder Zeile hervorhebt, wie Sie here sehen können.

Ich möchte es alle Treffer hervorheben.

Voll Code hier: https://pastebin.com/BkuXN5pk

+1

Warum nicht das 're' Modul verwenden? –

+0

@ I'L'I Ich bin ein Noob zu Python, können Sie erklären, was das ist –

+0

https://docs.python.org/3/howto/regex.html –

Antwort

2

empfehlen den Text widget integrierten Such Fähigkeit verwenden. Wird mit python3 angezeigt.

from tkinter import * 

root = Tk() 
textArea = Text(root) 
textArea.grid() 
textArea.tag_config('select', background = 'green') 

f = open('mouse.py', 'r') 
content = f.read() 
f.close() 
textArea.insert(END, content) 

def Find(input): 
    start = 1.0 
    length = len(input) 
    while 1: 
     pos = textArea.search(input, start, END) 
     if not pos: 
      break 
     end_tag = pos + '+' + str(length) + 'c' 
     textArea.tag_add('select', pos, end_tag) 
     start = pos + '+1c' 

Find('display') 
root.mainloop() 
+0

Das funktioniert, aber jetzt ist es Groß-und Kleinschreibung, wie würde ich das ändern? –

+0

pos = textArea.search ((Eingabe, Start, END, nocase = True). Ich habe es nicht ausprobiert, aber sollte laut der Dokumentation unterstützt werden. –

+0

Es funktioniert, vielen Dank –

Verwandte Themen