【问题标题】:How To Change Color of Certain Words Inside a Label?如何更改标签内某些单词的颜色?
【发布时间】:2018-12-29 22:42:37
【问题描述】:

我想更改标签内某些单词的颜色。我看到了在带有tag_configuretag_add 的文本小部件中使用文字颜色变化的类似示例,但它不起作用,颜色不显示。不知道下面的代码有什么错误?

#!/usr/intel/bin/python2.7

import Tkinter
from Tkinter import * 
import ttk


class MyApp:
    def __init__(self, parent):
        self.top_left_label = Label(parent, text="Top Left")
        self.top_left_label.grid(row=0, column=0, padx=2, pady=2, sticky=N+S+W)

        self.top_right_label = Label(parent, text="Top Right")
        self.top_right_label.grid(row=0, column=1, padx=2, pady=2, sticky=N+S+E)

        mytext = Text(root)
        mytext.insert(INSERT, "Enter the Apple %d Configuration Name"% 2)
        mytext.tag_configure("highlight", background="red")
        mytext.tag_add("highlight", "11.0", "16.0")
        self.ad_l0 = Label(root, text=mytext.get("1.0", END))

        self.ad_l0.grid(row=2, column=0, sticky='W')
        self.ad_l0.rowconfigure(2, weight=1)


root = Tk()
root.title("Test UI")
myapp = MyApp(root)
root.mainloop()

【问题讨论】:

标签: python python-2.7 tkinter


【解决方案1】:

标签不能使用超过两种颜色(前景和背景)。如果您需要多种颜色,则必须使用小画布或文本小部件。

【讨论】:

    【解决方案2】:

    首先您应该直接grid() 文本,而不是将其插入新标签中,因为这将重置标签中的所有标签(mytext.get("1.0", END) 只会复制文本,而不是标签)。

    然后选择的索引正在寻找第 11 到 16 行。请参考这个doc,它解释了您可以使用的不同选择器。

    class MyApp:
        def __init__(self, parent):
            self.top_left_label = Label(parent, text="Top Left")
            self.top_left_label.grid(row=0, column=0, padx=2, pady=2, sticky=N+S+W)
    
            self.top_right_label = Label(parent, text="Top Right")
            self.top_right_label.grid(row=0, column=1, padx=2, pady=2, sticky=N+S+E)
    
            self.mytext = Text(root)
            self.mytext.insert(INSERT, "Enter the Apple %d Configuration Name"% 2)
    
            self.mytext.tag_add("highlight", "1.0", "2.0") # colors the whole 1st line
            #self.mytext.tag_add("highlight", "1.10", "1.15") # colors only 'Apple' 
            self.mytext.tag_configure("highlight", background="red")
            self.mytext.grid(row=2, column=0, sticky='W')
    

    【讨论】:

    • 感谢您的澄清。但是,根本不可能显式地更改 Label 本身中特定单词的颜色吗?而不是网格化文本?
    • 完全没有:'Label' object has no attribute 'tag_add'
    • “首先你应该 grid()” - 为什么? gridpack 都有优点和缺点,它们都与更改颜色或重置文本小部件中的标签无关。
    • @BryanOakley gridpack 在这里无关紧要,我同意,我主要是在谈论在布局中添加 Text,而不是 Label(和 grid已经在代码中使用了..)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2011-02-28
    • 1970-01-01
    • 2010-11-13
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多