2013-07-01 73 views
1

我有這個類來創建一個狀態欄繪製文本:Tkinter的帆布 - 在上面

class Statusbar(Canvas): 
    '''Creates a statusbar widget''' 
    def __init__(self, master = None, **options): 
     if not master: master = Tk() 
     self.master, self.options = master, options 
     self.barFill, self.addText, self.value = self.options.get('barFill', 'red'), self.options.get('addText', True), 0 
     for option in ('barFill', 'addText'): 
      if option in self.options: del self.options[option] 
     Canvas.__init__(self, master, **self.options) 
     self.offset = self.winfo_reqwidth()/100 
     self.height = self.winfo_reqwidth() 
     if self.addText: self.text = self.create_text(self.winfo_reqwidth()/2, self.winfo_reqheight()/2, text = '0%') 
     self.bar = self.create_rectangle(0, 0, self.value, self.height, fill = self.barFill) 

    def setValue(self, value): 
     '''Sets the value of the status bar as a percent''' 
     self.value = value * self.offset 
     self.coords(self.bar, 0, 0, self.value, self.height) 
     if self.addText: self.itemconfigure(self.text, text = str(self.value/self.offset) + '%') 

    def change(self, value): 
     '''Changes the value as a percent''' 
     self.value += (value * self.offset) 
     self.coords(self.bar, 0, 0, self.value, self.height) 
     if self.addText: self.itemconfigure(self.text, text = str(self.value/self.offset) + '%') 

我的問題是,該文本在矩形總是畫。所以當矩形到達文本時,你不能再看到文本。我怎樣才能解決這個問題?提前致謝。

回答

2

一個對象坐在另一個對象上的事實稱爲堆棧順序。默認情況下,稍後創建的對象比先前創建的對象具有更高的堆疊順序。所以,一種解決方案是繪製矩形,然後繪製文本。

您還可以使用畫布的liftlower命令將事物向上或向下移動堆疊順序。你必須給它一個你想要擡起或放下的標識或標籤,並且可以選擇一個你希望第一個對象在上面或下面的對象的id或標籤。

因此,舉例來說,你可以提高文字是這樣的矩形上方:

self.lift(self.text, self.bar) 

如果你想獲得真正看中的,您可以創建圖層的概念。我在另一個答案中給出了一個例子,在這裏:https://stackoverflow.com/a/9576938/7432

1

在我的程序設計課上,我們說過要把最後不想被屏蔽的文本放進去。所以把文字放在你正在用什麼函數繪製的底部