只是想知道如何为输出添加颜色。代码如下: 使用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"
答案 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