【问题标题】:Rendering text to a kivy canvas将文本渲染到 kivy 画布
【发布时间】:2016-02-03 00:56:15
【问题描述】:

我正在尝试在 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

有没有简单的方法可以达到我需要的效果?

谢谢

【问题讨论】:

    标签: python canvas text kivy


    【解决方案1】:

    回答我自己的问题:

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

    这对我有用,虽然有点笨重!

    【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多