2015-11-03 35 views
2

我想在一個kivy「畫布」中繪製我自己的圖形。現在我有一個紅色或綠色的矩形,每秒改變一次顏色,但我想添加一個不斷變化的文本標籤。將文本渲染到一個kivy畫布

經過一番搜索,看起來沒有可以添加到畫布的「文本」指令。我發現了一些使用Label()小部件以及畫布指令的參考,但這看起來並不理想,而且我似乎也無法使它多次渲染。

這是我的目標,因爲它代表的時刻:

class HVObject(BoxLayout): 
    def __init__(self, **kwargs): 
     BoxLayout.__init__(self, **kwargs) 
     self.colour = 1 
     self.label = Label() 
     self.render() 
     self.add_widget(self.label) 

     self.bind(size=self._update_rect, pos=self._update_rect) 
     Clock.schedule_interval(self.callevery, 1) 

    def render(self): 
     self.canvas.clear() 
     self.rect = Rectangle(size=self.size, pos=self.pos) 
     self.canvas.add(Color(1-self.colour, self.colour, 0, 1)) 
     self.canvas.add(self.rect) 
     self.label.text = "COL %d" % self.colour 
     self.canvas.ask_update() 

    def callevery(self, x): 
     self.colour = 1-self.colour 
     self.render() 

    def _update_rect(self, instance, value): 
     self.rect.pos = instance.pos 
     self.rect.size = instance.size 
     self.label.pos = instance.pos 

有一種簡單的方法可以達到我需要的效果?

謝謝

回答

3

回答我的問題:

周圍[kivy]花園的小樣子後,我發現Tickline(和蜱)。並使用CoreLabel()和Rectangle(texture = ...)

這裏是我更新的render()方法,它添加了我需要的文本對象。

def render(self): 
     self.canvas.clear() 
     self.canvas.add(Color(1-self.colour, self.colour, 0, 1)) 
     self.rect = Rectangle(size=self.size, pos=self.pos) 
     self.canvas.add(self.rect) 
     label = CoreLabel(text="COL %d" % self.colour, font_size=20) 
     label.refresh() 
     text = label.texture 
     self.canvas.add(Color(self.colour, 1-self.colour,0, 1)) 
     pos = list(self.pos[i] + (self.size[i] - text.size[i])/2 for i in range(2)) 
     self.canvas.add(Rectangle(size=text.size, pos=pos, texture=text)) 
     self.canvas.ask_update() 

這對我來說雖然有點笨重!