且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何更改 tkinter 文本小部件中某些单词的颜色?

更新时间:2023-01-26 18:34:30

主要思想是将标签应用到您想要自定义的文本部分.您可以使用方法 tag_configure,具有特定的样式,然后您只需要使用方法 tag_add.您还可以使用 tag_remove 方法删除标签.

The main idea is to apply tags to the parts of text you want to customise. You can create your tags using the method tag_configure, with a specific style, and then you just need to apply this tag to the part of text you want to change using the method tag_add. You can also remove the tags using the method tag_remove.

以下是使用 tag_configuretag_addtag_remove 方法的示例.

The following is an example that uses tag_configure, tag_add and tag_remove methods.

#!/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()

如果您不知道 sel.firstsel.last 是什么,请查看 这篇文章这篇 参考.

If you don't know what sel.first and sel.last are, check out this post or this reference.