Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为python代码添加颜色_Python_Tkinter - Fatal编程技术网

如何为python代码添加颜色

如何为python代码添加颜色,python,tkinter,Python,Tkinter,只是想知道我怎样才能给我的输出添加颜色。代码如下: 使用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 BM

只是想知道我怎样才能给我的输出添加颜色。代码如下: 使用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"
如果体重指数<18.5:
self.answer_label['text']=“体重指数为“+str(BMI)+”的人体重不足”

elif 18.5因此,主要问题是在tkinter中,标签小部件接受单一颜色

如果使用
.pack(side=“left”)
打包每个标签,并为每个小部件分配颜色,则可以并排组合各种标签的文本

这不太实际

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

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

文本小部件最完整(但仍然缺乏)的文档如下:

通过阅读,您会发现要在文本小部件中输入彩色文本,您必须使用文本属性预先配置“标记”,然后使用其
插入
文本,使用索引作为位置,并标记您正在使用的标记

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

其思想是使用下面的“ColoredLabel”class I列表来代替“Label”小部件。由于它继承自tkinter小部件,“配置”、“打包”、“网格”等方法将正常工作,然后使用其“附加”方法创建其内容:

# 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_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")
self.answer\u label.clear()
self.answer\u label.append(“体重指数为的人”)
如果体重指数<18.5:
自我回答标签附加(str(bmi),“黄色”)
self.answer\u label.append(“体重不足”)
elif 18.5=30:
自我回答标签附加(str(bmi),“红色”)
self.answer\u label.append(“肥胖”)

(当然,如果您希望整个标签的颜色相同,
label
支持它-只需做
self.answer\u label['foreground']='red'
,在您的原始文本上)

这将比看起来难一点-虽然没有完整的答案,我建议您学习使用str.format方法,并用您想要得到的颜色示例编辑您的问题。