Tkinter文本标签配置不持久

时间:2014-02-14 16:22:12

标签: python tkinter

我正在尝试为我的应用程序中的每个奇数行着色,但是我只有一条线在屏幕上移动。这是因为我不坚持标签吗?

以下是一些代码:

def addTextToRaw(self, text, changeColour=False, numberOfLines=0):
    self.rawText.config(state=NORMAL)
    self.rawText.insert(END,text)
    self.rawText.config(state=DISABLED)
    if changeColour is True:
        print "Changing Coloiur" + str(self.numberOfObjects())
        lastLine = int(self.rawText.index('end-1c').split('.')[0])
        start = str(lastLine)+".0"
        end = str(lastLine)+".0+"+str(1+numberOfLines)+"lines"
        self.rawText.tag_add("oddObject"+str(self.numberOfObjects()), start, end)
        self.rawText.tag_config("oddObject"+str(self.numberOfObjects()), background="blue", foreground="white")

使用after方法调用此方法,该方法从正在处理的队列中获取数据。

所有颜色线都不会只在屏幕上移动一行。那么我该怎么办才能让颜色持续下去?

2 个答案:

答案 0 :(得分:2)

如果要为每一行添加颜色,只需为每行添加一次标记,并且只需在创建窗口小部件时配置一次标记。

这是一个有效的例子:

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.text = tk.Text(self, wrap="word")
        self.vsb = tk.Scrollbar(self, orient="vertical", command=self.text.yview)
        self.text.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.text.pack(side="left", fill="both", expand=True)

        self.text.tag_configure("odd", background="white", foreground="black")
        self.text.tag_configure("even", background="blue", foreground="white")

        self.addText(tk.__doc__)

    def addText(self, text):
        # get the starting line number
        index = int(self.text.index("end-1c").split(".")[0])

        # insert each line, adding a odd or even tag
        tag = "even" if (index%2 == 0) else "odd"
        for line in text.split("\n"):
            self.text.insert("end", line+"\n", tag)
            tag = "even" if tag == "odd" else "odd"


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

答案 1 :(得分:0)

在更新方法中调用tag_config方法,然后调用它。你也可以给它相同的标签,这样就可以简化这种方法:

def addTextToRaw(self, text, changeColour=False):
    self.rawText.config(state=NORMAL)
    if changeColour is True: 
        self.rawText.insert(END,text ,'oddObject')
    else:
        self.rawText.insert(END,text)
    self.rawText.config(state=DISABLED)

然后在更新方法中只需调用:

self.rawText.tag_config("oddObject", background="blue", foreground="white")