Đó là tiện ích phù hợp để sử dụng cho các mục đích này. Khái niệm cơ bản là, bạn gán các thuộc tính cho các thẻ, và bạn áp dụng các thẻ cho các phạm vi văn bản trong widget. Bạn có thể sử dụng lệnh search
của tiện ích con văn bản để tìm chuỗi phù hợp với mẫu của bạn, điều này sẽ trả lại cho bạn đủ thông tin áp dụng thẻ cho phạm vi phù hợp.
Ví dụ về cách áp dụng thẻ cho văn bản, hãy xem câu trả lời của tôi cho câu hỏi Advanced Tkinter text box?. Nó không chính xác những gì bạn muốn làm nhưng nó cho thấy khái niệm cơ bản.
Sau đây là ví dụ về cách bạn có thể mở rộng lớp Văn bản để bao gồm phương pháp đánh dấu văn bản khớp với mẫu.
Trong mã này mẫu phải là một chuỗi, nó không thể là biểu thức chính quy được biên dịch. Ngoài ra, mẫu phải tuân theo Tcl's syntax rules for regular expressions.
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")
Đây là tiện ích phù hợp. Xem những gì ['nhàn rỗi'] (http://hg.python.org/cpython/file/63a00d019bb2/Lib/idlelib). – tzot
@tzot Ít nhất bạn có thể đưa ra một chỉ dẫn tốt hơn về những tệp mà người ta sẽ thấy. 'idlelib' chứa nhiều tệp và mô-đun, v.v. và có một chút khó khăn khi tìm một cái gì đó, theo ý kiến của tôi, không có tài liệu thực sự, và chủ yếu là nếu một người không có nhiều kinh nghiệm. Tôi sẽ dẫn đầu người dùng của trang web này trước tiên cho bài viết này: https://docs.python.org/3.5/library/idle.html – nbro