将文本渲染到 kivy 画布

2024-03-29

我正在尝试在奇异的“画布”中绘制自己的图形。现在我有一个红色或绿色的矩形,每秒改变一次颜色,但我想添加一个变化的文本标签。

经过一番搜索后,似乎没有可以添加到画布的“文本”指令。我发现了一些关于使用 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

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

谢谢


回答我自己的问题:

环顾了一下[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()

这对我有用,尽管有点笨重!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文本渲染到 kivy 画布 的相关文章

随机推荐

  • Firebase 存储同步上传

    我正在尝试上传到 GcmTaskService 内的 Firebase 存储 我想同步上传 但所有上传方法 putBytes putFile 都是异步的 我没有找到任何方法来等待上传完成 有什么办法可以同步上传吗 是的 如果您不在 UI 线
  • 返回关联 PHP 数组的前 n 个值?

    我有一个 PHP 数组 排序后如下所示 Array 542 gt 30 588 gt 29 77 409 gt 19 9 237 gt 19 47 457 gt 17 73 410 gt 15 86 实际的数组相当长 最初 按键按顺序设置
  • 用于分割 .csv 文件的批处理文件

    我有一个非常大的 csv 文件 gt 500mb 我希望在命令提示符下将其分解为较小的 csv 文件 基本上是试图在Windows中找到Linux 分割 功能 这必须是一个批处理脚本 因为我的机器只安装了 Windows 并且请求软件很痛苦
  • 确定扑克中的获胜金额而不创建边池

    我正在尝试运行扑克模拟并拥有有关扑克桌的以下数据 每个玩家为底池贡献了多少 每个玩家的 手牌得分 翻牌后 即 如果player 0 score player 1 score 他们并列 我一直在计算每个玩家应该赢得多少 而不需要创建边池并将玩
  • 使用 Vue.Js / Inertia.js 和 Laravel 对结果进行分页

    我正在尝试在 Vue Js 中对来自 Laravel 的数据进行分页 我也在使用 Inertia js 在我的 Laravel 控制器中 我有 data participants User with groups gt select id
  • Javascript:将值返回给回调函数外部的变量[重复]

    这个问题在这里已经有答案了 我有一个非常具体的问题 希望有人可以帮助我 我对 Javascript 很陌生 对 NodeJS 则更陌生 我在用lodash s forIn遍历并添加到数组内的对象的功能 整个事情看起来是这样的 id 20 k
  • Visual Studio 2022 无法构建任何项目

    每次我在 Visual Studio 2022 中构建任何项目时 我在构建输出中得到的都是 Build started 1 gt Build started Project ConsoleApp7 Configuration Debug A
  • 使用 socket.io 处理超大消息

    我有一个 nodejs 项目 它生成多个与套接字 io 通信的进程 该进程既发送数据又接收数据 有时在功能开发过程中 其他程序员可能会犯错误 导致我的套接字基础结构代码发送超过大小 X 例如 超过 500MB 的大消息 我正在寻找一种方法来
  • 如果超过一组特定的行发生更改,如何让 git 仅识别文件已更改?

    在我当前的项目中 我尝试使用 git 来版本控制文本文件 这些文件由生成代码的软件使用 这本身不是问题 问题是每次我生成代码时 它都会自动更新此文件的属性 例如代码生成的日期以及我的名字 你可以想象它看起来像这样 SomeHeader So
  • 将列引导至相同高度并让子列匹配高度

    正如标题所暗示的 我正在努力获得正常的均匀性和干净的线条 table 提供 但具有 Bootstrap 网格系统的响应能力 我用过部分解决方案在这里找到 http www minimit com articles solutions tut
  • Facebook Connect 使用 ASP.NET 会员提供程序与网站集成

    是否有任何最佳实践或示例来说明如何使用会员提供程序 或类似的东西 将 Facebook connect 与现有 ASP NET 应用程序最好地集成 我确信我可以做一些事情 但是 如果有一些关于这方面的信息和最佳实践来减轻任何安全问题 那就太
  • SourceTree 将拉取的文件视为未提交的更改

    在某些未知的情况下 当我使用 SourceTree 拉取时 它会将所有拉取的文件视为未提交的更改 并且不允许再拉 推 除非重新提交或放弃这些更改 如果我丢弃未提交的文件 它将丢弃我的队友应用的所有更改 这有什么问题吗 是否存在已知的错误或其
  • graph6 格式如何工作?

    我一直在到处寻找 g6 或 graph6 格式的工作原理 但我不知道它是如何工作的 我发誓它就像魔法一样 F B w 这是一个以 ASCII 形式表示的图表 它可以由 Wolfram Mathematica Sage 和 Maple 等进行
  • Angular 错误:PostCSS 收到未定义而不是 CSS 字符串

    尝试构建 Angular 项目 但出现以下错误 这个项目上周建得很好 我对使用此项目中的 Dll 的其他项目进行了一些更改 但没有对此项目进行任何更改 我已经花了很多时间来排除故障 但没有运气 感谢任何帮助 错误 PostCSS 收到未定义
  • Facebook SDK 和通过 ShareDialog 问题共享 Play 商店应用程序链接

    我正在尝试使用 Facebook SDK 中的 ShareDialog 共享链接 我的 Google Play 应用程序链接 但问题是 当 URL 是我的应用程序的 Google Play 链接时 其他信息无法正确显示 实际上它只显示链接来
  • 如何让shell脚本在Mac中双击运行?

    我创建了一个 shell 脚本来在 Mac 中运行 jar 文件 bin sh java Xmx512m jar test jar 我已将此脚本重命名为 应用程序命令 双击就可以直接运行 我已经应用了 chmod x 命令使其具有可执行权限
  • PHP header() 不会重定向问题

    我的 header Location index php action messagesent 有问题 在用户按下提交并且 php 运行后 它不会重定向 通常它会重定向 但由于某种原因它不起作用 它只是在点击提交后重新加载页面 但它确实在标
  • 如何删除联系人?

    我正在使用 android 2 1 ContactContract 当我没有将帐户 例如 gmail 帐户 设置为 android 模拟器时 新建一个联系人 但无法在数据库中删除该联系人 ArrayList
  • 添加包含订单计数的列

    如何向数据框中添加一列来说明另一列中某个值出现的顺序计数 这就是我想要的结果 Fruit orderCount 1 Orange 1 2 Banana 1 3 Orange 2 4 Apple 1 5 Orange 3 6 Banana 2
  • 将文本渲染到 kivy 画布

    我正在尝试在奇异的 画布 中绘制自己的图形 现在我有一个红色或绿色的矩形 每秒改变一次颜色 但我想添加一个变化的文本标签 经过一番搜索后 似乎没有可以添加到画布的 文本 指令 我发现了一些关于使用 Label 小部件以及画布说明的参考 但这