如何添加颜色到我的Python鳕鱼

2024-04-26 21:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想知道如何给我的输出添加颜色。代码如下: 使用pythontkintergui。你知道吗

    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"

Tags: of代码textanswerselfis颜色with
0条回答
网友
1楼 · 发布于 2024-04-26 21:32:10

所以,主要问题是在tkinter中,Label小部件接受单一颜色。你知道吗

如果用.pack(side="left")包装每个标签,并为每个小部件分配一种颜色,那么您可以将各种标签并排地组成文本。你知道吗

这不太实际。你知道吗

另一种给文本着色的方法是使用tkinter.Text小部件。问题是,在Label的另一面,Text小部件太宽,允许许多选项格式化其中的文本。一个使用“文本”小部件作为主要组件的程序,只要有几百行代码,就可以像microsoftword那样成为富文本的文本编辑器。你知道吗

缺点是文档很难找到,示例很少,而且不完整。(这是我给你这个答案的主要动机——再举一个“现实世界”的例子也不错)。你知道吗

文本小部件最完整(但仍然缺乏)的文档在这里:http://effbot.org/tkinterbook/text.htm

通过阅读它,您发现要在文本小部件中输入彩色文本,您必须使用text属性预先配置“tags”,然后使用它的insert您的文本使用索引作为位置,并标记您正在使用的标记。你知道吗

我为Text小部件创建了一个子类,它对一些样式元素(以及“state”配置)进行硬编码,这样它的行为更像一个标签,并添加了两个新方法:append它允许您将文本添加到元素的末尾,指定颜色和背景色,以及clear清除所有内容并重新开始。你知道吗

我们的想法是使用下面的“ColoredLabel”类列表来代替“Label”小部件。当它从tkinter小部件继承时,“configure”、“pack”、“grid”等方法将正常工作,然后使用其“append”方法创建其内容:

# 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"

如果您的“answer\u label”属性被定义为“ColoredLabel”,那么您只需将代码编写为:

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支持它—只需对原始文本执行self.answer_label['foreground'] = 'red'

相关问题 更多 >