2017-03-09 52 views
1

只是想知道如何爲我的輸出添加顏色。代碼如下: 使用python tkinter gui。如何爲我的python代碼添加顏色

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

這將是一個有點困難似乎比 - - 雖然沒有完整的答案,但我建議你學習使用str.format方法 - https://docs.python.org/3/library/stdtypes.html - 並且用一個例子來編輯你的問題你想要的顏色。 – jsbueno

回答

1

所以,主要問題是在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'你的原文)