如何将tkinter标签中的文本与不同颜色合并

时间:2014-07-15 14:30:54

标签: python colors tkinter label

我正在编写一个带有tkinter标签的小股票股票代码程序,我需要在红色和绿色的同一行文本中合并。我怎么能这样做?

如果没有,是否有其他小部件我可以用它来做?

2 个答案:

答案 0 :(得分:3)

标签中不能有多种颜色。如果需要多种颜色,请使用单行文本小部件,或使用带有文本项的画布。

这是一个使用文本小部件的快速而肮脏的示例。它没有进行平滑滚动,不使用任何实际数据,并且因为我从未修剪输入小部件中的文本而泄漏内存,但它提供了一般性的想法:

import Tkinter as tk
import random

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.ticker = tk.Text(height=1, wrap="none")
        self.ticker.pack(side="top", fill="x")

        self.ticker.tag_configure("up", foreground="green")
        self.ticker.tag_configure("down", foreground="red")
        self.ticker.tag_configure("event", foreground="black")

        self.data = ["AAPL", "GOOG", "MSFT"]
        self.after_idle(self.tick)

    def tick(self):
        symbol = self.data.pop(0)
        self.data.append(symbol) 

        n = random.randint(-1,1)
        tag = {-1: "down", 0: "even", 1: "up"}[n]

        self.ticker.configure(state="normal")
        self.ticker.insert("end", " %s %s" % (symbol, n), tag)
        self.ticker.see("end")
        self.ticker.configure(state="disabled")
        self.after(1000, self.tick)

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()

答案 1 :(得分:0)

如果您希望在同一行上获得两种颜色,则可以使用多个标签,并使用.grid()使其在同一行上。

例如,如果您想使用两个单词和两种颜色,则可以使用以下内容:

root = Tk()
Label(root,text="red text",fg="red").grid(column=0,row=0)
Label(root,text="green text",fg="green").grid(column=0,row=1)
mainloop()

或者如果您想为字符串中的每个单词使用不同的颜色,例如:

words = ["word1","word2","word3","word4"]
colours = ["blue","green","red","yellow"]

for index,word in enumerate(words):
    Label(window,text = word,fg=colours[index]).grid(column=index,row=0)