2014-02-14 158 views
0

我试图给我的应用程序中的每一个奇数行着色,但是我只是有一条线正在向下移动屏幕。这是因为我不坚持标签?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") 

本方法采用的方法之后,它从正被处理的队列中获取数据调用。

没有一条彩色线条留在屏幕上,只有一条线条向下移动。那么,我能做些什么来使颜色持续存在?

回答

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") 
+1

我不明白你对在更新方法配置标签注释。你只需要配置标签一次。 –

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