Dav*_*nce 5 python text canvas 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
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来达到我需要的效果?
谢谢
回答我自己的问题:
看了一眼[kivy]花园后,我找到了Tickline(和Tick).和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()
Run Code Online (Sandbox Code Playgroud)
这对我有用,虽然有点笨重!
| 归档时间: |
|
| 查看次数: |
2974 次 |
| 最近记录: |