2014-02-14 128 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()