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

1 投票
2 回答
10076 浏览
提问于 2025-04-18 13:24

我正在用tkinter做一个股票行情显示的小程序,我想在同一行上显示红色和绿色的文字。请问我该怎么做?

如果不行,有没有其他的控件可以实现这个功能?

2 个回答

3

如果你想在同一行显示两种颜色,可以使用多个标签,并通过 .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)
6

在标签里不能使用多种颜色。如果你想要多种颜色,可以用一行的文本组件,或者使用一个画布加上文本项。

下面是一个简单的例子,使用了文本组件。这个例子没有实现平滑滚动,也没有用到真实的数据,而且因为我没有清理输入框里的文本,所以会有内存泄漏,但它能让你大概明白这个意思:

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()

撰写回答