如何为我的python代码添加颜色

时间:2017-03-09 23:07:01

标签: python tkinter

只是想知道如何为输出添加颜色。代码如下: 使用python tkinter gui。

    if bmi < 18.5:
        self.answer_label['text'] = "A person with a BMI of " + str(bmi) + " is underweight " 
    elif 18.5 <= bmi < 25:
        self.answer_label['text'] = "A person with a BMI of " + str(bmi) + " has a healthy weight"
    elif 25 <= bmi < 30:
        self.answer_label['text'] = "A person with a BMI of " + str(bmi) + " is overweight"
    elif bmi >= 30:
        self.answer_label['text'] = "A person with a BMI of " + str(bmi) + " is obese"

1 个答案:

答案 0 :(得分:1)

因此,主要问题是在tkinter中,Label小部件接受单一颜色。

如果您使用.pack(side="left")打包每个标签,您可以并排撰写各种标签的文本,并为每个小部件指定颜色。

这不太实际。

另一个着色文本是使用tkinter.Text小部件。问题是在Label的另一侧,Text窗口小部件太宽泛,允许很多选项来格式化其中的文本。有几百行,一个程序使用&#34; Text&#34; widget作为其主要组件可以成为富文本的文本编辑器,以Microsoft Word的方式。

缺点是文档很难找到,只有很少的例子,而且不完整。 (这是我得到这个答案的主要动机 - 再多一次&#34;真实的世界&#34;例子不会很糟糕。)

“文本”小部件的最完整(但仍然缺少)文档位于:http://effbot.org/tkinterbook/text.htm

通过阅读,您会发现能够在文本小部件中输入彩色文本,您必须预先配置&#34;标签&#34;使用text属性,然后使用索引作为位置使用其insert文本,并标记您正在使用的标记。

我创建了Text小部件的子类,它硬编码了一些样式元素(以及&#34;状态&#34;配置),因此它的行为更像Label - 并添加了两个新方法:{ {1}}允许您将文本添加到元素的末尾,指定颜色和背景颜色,append,以清除其所有内容并重新开始。

这个想法是你使用&#34; ColoredLabel&#34;我列出了以下#34;标签&#34;小部件。当它继承自tkinter Widget时,诸如&#34; configure&#34;,&#34; pack&#34;,&#34; grid&#34;等方法将正常工作 - 然后使用其&#34;追加&#34;创建其内容的方法:

clear

如果你的&#34; answer_label&#34;属性被定义为&#34; ColoredLabel&#34;,您只需将代码编写为:

# boilerplate to assert working under Python 2.7 as well as Python 3:
try:
    import tkinter
except ImportError:
    import Tkinter as tkinter

class ColoredLabel(tkinter.Text):
    def __init__(self, parent, text="", **kw):
        params = {"relief": "flat", "border": 0, "height": 1, "highlightthickness": 0}
        kw.update(params)
        super(ColoredLabel, self).__init__(parent, **kw)
        self.tags = set()
        self.length = 0
        self.append(text)

    def clear(self):
        self["state"] = "normal"
        self.length = 0
        self.delete("1.0", tkinter.END)
        self["state"] = "disabled"

    def append(self, text, color=None, background=None):
        """Inserts text at the end of the existing text.
        Colors passed in the parameter are used for inserted text
        """
        self.length += len(text)
        tagname = "{}_{}".format(color, background)
        if tagname not in self.tags:
            params = {}
            if color: 
                params["foreground"] = color
            if background:
                params["background"] = background
            self.tags.add(tagname)
            self.tag_config(tagname, **params)
        self["state"] = "normal"
        self["width"] = self.length
        self.insert(tkinter.END, text, (tagname,))
        self["state"] = "disabled"

(当然,如果您希望整个标签颜色相同,self.answer_label.clear() self.answer_label.append("A person with a BMI of ") if bmi < 18.5: self.answer_label.append(str(bmi), "yellow") self.answer_label.append(" is underweight ") elif 18.5 <= bmi < 25: self.answer_label.append(str(bmi), "green") self.answer_label.append(" has a healthy weight") elif bmi >= 30: self.answer_label.append(str(bmi), "red") self.answer_label.append(" is obese") 支持它 - 只需在原始文字上Label