所以,主要問題是在tkinter中,Label小部件接受單一顏色。
你可以並排組成的各種標籤,側面的文字,如果你有.pack(side="left")
把每 - 並分配一個顏色每個插件。
,是不是太實用。
着色文本的另一AY使用tkinter.Text
插件代替。問題是在Label
的對面,Text
小部件太寬泛,並允許很多選項來設置其中的文本格式。使用幾百行代碼,使用「文本」小部件作爲其主要組件的程序可以成爲富文本文本編輯器,就像Microsoft Word一樣。
缺點是,文檔是很難找到,有幾個例子,和不完整的。 (這是我獲得這個答案的主要動機 - 還有一個「真實世界」的例子不會太壞)。
爲文本插件的最完整的(但仍然缺乏)文檔是在這裏:http://effbot.org/tkinterbook/text.htm
通過閱讀它,你會發現,能在一個文本控件輸入彩色文本,你必須預先配置「標籤」與文本屬性,然後使用您的文本使用索引作爲位置,並標記您正在使用的標籤。
我做了Text
部件,其硬編碼的一些風格元素的一個子類(和「國家」的配置),因此,它更像一個標籤 - 並增加了兩個新的方法:append
它允許您添加文本指定一個顏色和一個背景顏色,並清除其所有內容並重新開始。
的想法是,你使用「ColoredLabel」級I代替你的「標籤」的小部件的波紋管列出。當它從一個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")
(當然,如果你想整個標籤設置爲相同的顏色,Label
有支持它 - 只是做self.answer_label['foreground'] = 'red'
你的原文)
這將是一個有點困難似乎比 - - 雖然沒有完整的答案,但我建議你學習使用str.format方法 - https://docs.python.org/3/library/stdtypes.html - 並且用一個例子來編輯你的問題你想要的顏色。 – jsbueno