2013-02-09 49 views

Trả lời

13

Ý tưởng chính là để áp dụng thẻ đến các bộ phận của văn bản mà bạn muốn tùy chỉnh. Bạn có thể tạo thẻ của mình bằng cách sử dụng phương thức tag_configure, với một kiểu cụ thể và sau đó bạn chỉ cần áp dụng thẻ này cho phần văn bản bạn muốn thay đổi bằng cách sử dụng phương thức tag_add. Bạn cũng có thể xóa các thẻ bằng cách sử dụng phương thức tag_remove.

Sau đây là ví dụ sử dụng phương thức tag_configure, tag_addtag_remove.

#!/usr/bin/env python3 

import tkinter as tk 
from tkinter.font import Font 

class Pad(tk.Frame): 

    def __init__(self, parent, *args, **kwargs): 
     tk.Frame.__init__(self, parent, *args, **kwargs) 

     self.toolbar = tk.Frame(self, bg="#eee") 
     self.toolbar.pack(side="top", fill="x") 

     self.bold_btn = tk.Button(self.toolbar, text="Bold", command=self.make_bold) 
     self.bold_btn.pack(side="left") 

     self.clear_btn = tk.Button(self.toolbar, text="Clear", command=self.clear) 
     self.clear_btn.pack(side="left") 

     # Creates a bold font 
     self.bold_font = Font(family="Helvetica", size=14, weight="bold") 

     self.text = tk.Text(self) 
     self.text.insert("end", "Select part of text and then click 'Bold'...") 
     self.text.focus() 
     self.text.pack(fill="both", expand=True) 

     # configuring a tag called BOLD 
     self.text.tag_configure("BOLD", font=self.bold_font) 

    def make_bold(self): 
     # tk.TclError exception is raised if not text is selected 
     try: 
      self.text.tag_add("BOLD", "sel.first", "sel.last")   
     except tk.TclError: 
      pass 

    def clear(self): 
     self.text.tag_remove("BOLD", "1.0", 'end') 


def demo(): 
    root = tk.Tk() 
    Pad(root).pack(expand=1, fill="both") 
    root.mainloop() 


if __name__ == "__main__": 
    demo() 

Nếu bạn không biết những gì sel.firstsel.last được, hãy kiểm tra this post hoặc this tham khảo.

+0

những gì nếu tôi cần phải làm như vậy với các mục văn bản canvas? – Kay

4

Hãy nhìn vào ví dụ này:

from tkinter import * 

root = Tk() 

text = Text(root) 
text.insert(INSERT, "Hello, world!\n") 
text.insert(END, "This is a phrase.\n") 
text.insert(END, "Bye bye...") 
text.pack(expand=1, fill=BOTH) 

# adding a tag to a part of text specifying the indices 
text.tag_add("start", "1.8", "1.13") 
text.tag_config("start", background="black", foreground="yellow") 

root.mainloop() 
+2

tag_add (tên thẻ, startindex [, endindex] ...) Thẻ phương thức này hoặc vị trí được xác định bởi startindex hoặc phạm vi được giới hạn bởi vị trí startindex và endindex. –

+0

điều là với 1,8 và 1,13 là nơi mà các văn bản là tôi muốn nó thay đổi màu sắc khi bao giờ văn bản đi lên – Elxafil

4

Tôi đã thực hiện một ứng dụng trò chuyện. Tôi đã đánh dấu một số phần nhất định của cuộc hội thoại bằng cách sử dụng tiện ích con tùy chỉnh khá dễ sử dụng Text cho phép bạn áp dụng các thẻ bằng cách sử dụng cụm từ thông dụng. Nó được dựa trên bài viết sau đây: How to highlight text in a tkinter Text widget.

Ở đây bạn có một ví dụ sử dụng:

# "text" is a Tkinter Text 

# configuring a tag with a certain style (font color) 
text.tag_configure("red", foreground="red") 

# apply the tag "red" 
text.highlight_pattern("word", "red") 
Các vấn đề liên quan