Es ist das richtige Widget für diese Zwecke zu verwenden. Das grundlegende Konzept besteht darin, dass Sie Tags Tags zuweisen und Tags auf Textbereiche im Widget anwenden. Sie können die search
Befehl des Text-Widgets verwenden Strings zu finden, die Ihre Muster entsprechen, die Sie genügend Informationen wenden Sie einen Tag auf den Bereich zurück, die abgestimmt.
Ein Beispiel für die Anwendung von Tags auf Text finden Sie in meiner Antwort auf die Frage Advanced Tkinter text box?. Es ist nicht genau das, was Sie tun wollen, aber es zeigt das Grundkonzept.
Im Folgenden finden Sie ein Beispiel dafür, wie Sie die Text-Klasse um eine Methode erweitern können, um Text hervorzuheben, der mit einem Muster übereinstimmt.
In diesem Code muss das Muster eine Zeichenfolge sein, es kann kein kompilierter regulärer Ausdruck sein. Außerdem muss das Muster Tcl's syntax rules for regular expressions entsprechen.
class CustomText(tk.Text):
'''A text widget with a new method, highlight_pattern()
example:
text = CustomText()
text.tag_configure("red", foreground="#ff0000")
text.highlight_pattern("this should be red", "red")
The highlight_pattern method is a simplified python
version of the tcl code at http://wiki.tcl.tk/3246
'''
def __init__(self, *args, **kwargs):
tk.Text.__init__(self, *args, **kwargs)
def highlight_pattern(self, pattern, tag, start="1.0", end="end",
regexp=False):
'''Apply the given tag to all text that matches the given pattern
If 'regexp' is set to True, pattern will be treated as a regular
expression according to Tcl's regular expression syntax.
'''
start = self.index(start)
end = self.index(end)
self.mark_set("matchStart", start)
self.mark_set("matchEnd", start)
self.mark_set("searchLimit", end)
count = tk.IntVar()
while True:
index = self.search(pattern, "matchEnd","searchLimit",
count=count, regexp=regexp)
if index == "": break
if count.get() == 0: break # degenerate pattern which matches zero-length strings
self.mark_set("matchStart", index)
self.mark_set("matchEnd", "%s+%sc" % (index, count.get()))
self.tag_add(tag, "matchStart", "matchEnd")
Es ist das richtige Widget. Sehen Sie, was [ 'idle'] (http://hg.python.org/cpython/file/63a00d019bb2/Lib/idlelib) der Fall ist. – tzot
@tzot Sie könnten zumindest einen besseren Hinweis darauf geben, welche Dateien angezeigt werden sollten. 'Idlelib' enthält viele Dateien und Module, usw., und es ist ein wenig schwierig, etwas zu finden, meiner Meinung nach, ohne eine wirkliche Dokumentation und vor allem, wenn man nicht viel Erfahrung hat. Ich werde die Benutzer dieser Website zuerst zu diesem Artikel führen: https://docs.python.org/3.5/library/idle.html – nbro