Kivy ObjectProperty 更新标签文本

2023-11-20

我正在创建一个 kivy 用户界面来显示由我编写为标准 python 对象的数据模型生成的值。本质上,我希望用户能够按下一个按钮,这将更改底层数据模型,并且此更改的结果将自动更新和显示。据我了解,这可以使用 kivy 属性(在本例中为 ObjectProperty)来实现。

这是一些示例代码:

import kivy
kivy.require('1.7.0')

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
from kivy.lang import Builder

Builder.load_string("""
<RootWidget>:
    cols: 2
    Label:
        text: "Attribute a:"
    Label:
        text: root.data_model.a
    Label:
        text: "Attribute b:"
    Label:
        text: root.data_model.b
    Label:
        text: "Attribute c:"
    Label:
        text: root.data_model.c
    Button:
        text: "Make data_model.a longer"
        on_press: root.button_press()
    Button:
        text: "Make data_model.b shorter"
        on_press: root.button_press2()
""")


class DataModel(object):
    def __init__(self):
        self.a = 'This is a'
        self.b ='This is b'

    @property
    def c(self):
        return self.a + ' and ' + self.b

class RootWidget(GridLayout):
    data_model = ObjectProperty(DataModel())

    def button_press(self, *args):
        self.data_model.a = 'This is a and it is really long now'
        print self.data_model.c

    def button_press2(self, *args):
        self.data_model.b = 'B'
        print self.data_model.c

class TestApp(App):
    def build(self):
        return RootWidget()

app = TestApp()
app.run()

所需的结果是当用户按下任一按钮时,标签将自动更新以显示新属性。从打印语句可以看出,data_model 正在正确更新。但是,没有一个标签正在更新。有人可以澄清如何做到这一点吗?


但是,没有一个标签正在更新。有人可以澄清如何做到这一点吗?

您引用的属性需要是 Kivy 属性,但是a, b and c您引用的只是 python 属性,因此 Kivy 无法绑定到它们的更改。

要使用属性,您需要对象继承EventDispatcher(Kivy 小部件会自动执行此操作,这就是它们的属性起作用的原因)。

from kivy.event import EventDispatcher

class DataModel(EventDispatcher):
    a = StringProperty('')
    b = StringProperty('')
    c = StringProperty('')

    def __init__(self, *args, **kwargs):
        super(DataModel, self).__init__(*args, **kwargs)
        self.a = 'This is a'
        self.b ='This is b'
        self.bind(a=self.set_c)
        self.bind(b=self.set_c)

    def set_c(self, instance, value):
        self.c = self.a + ' and ' + self.b        

请注意,这是not获得您想要的 c 行为的唯一方法(甚至必然是最好的方法)。您可以使用 kv 语言创建绑定(我通常会这样做),或者您可以查看 Kivy 的 AliasProperty 以获取更像您原始定义的内容。

当然你也可以在声明属性时设置a和b的值。

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

Kivy ObjectProperty 更新标签文本 的相关文章

  • 查找 with: 块中定义的函数

    这是一些代码理查德 琼斯的博客 http www mechanicalcat net richard log Python Something I m working on 3 with gui vertical text gui labe
  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 如何使用pycaffe重构caffe网络

    我想要的是 加载网络后 我将分解一些特定的图层并保存新的网络 例如 原网 数据 gt conv1 gt conv2 gt fc1 gt fc2 gt softmax New net 数据 gt conv1 1 gt conv1 2 gt c
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • 当x轴不连续时如何删除冗余日期时间 pandas DatetimeIndex

    我想绘制一个 pandas 系列 其索引是无数的 DatatimeIndex 我的代码如下 import matplotlib dates as mdates index pd DatetimeIndex 2000 01 01 00 00
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • Python While 循环,and (&) 运算符不起作用

    我正在努力寻找最大公因数 我写了一个糟糕的 运算密集型 算法 它将较低的值减一 使用 检查它是否均匀地划分了分子和分母 如果是 则退出程序 但是 我的 while 循环没有使用 and 运算符 因此一旦分子可整除 它就会停止 即使它不是正确
  • 字典的嵌套列表

    我正在尝试创建dict通过嵌套list groups Group1 A B Group2 C D L y x 0 for y in x if y x 0 for x in groups d k v for d in L for k v in
  • 我可以使用 dask 创建 multivariate_normal 矩阵吗?

    有点相关这个帖子 https stackoverflow com questions 52337612 random multivariate normal on a dask array 我正在尝试复制multivariate norma
  • 在 Mac 上安装 Pygame 到 Enthought 构建中

    关于在 Mac 上安装 Pygame 有许多未解答的问题 但我将在这里提出我的具体问题并希望得到答案 我在 Mac 上安装 Pygame 时遇到了难以置信的困难 我使用 Enthought 版本 EPD 7 3 2 32 位 它是我的默认框
  • 负整数的Python表示

    gt gt gt x 4 gt gt gt print b format x x 4 100 gt gt gt mask 0xFFFFFFFF gt gt gt print b format x mask x mask 4294967292
  • 如何逐像素绘制正方形(Python,PIL)

    在空白画布上 我想使用 Pillow 逐像素绘制一个正方形 我尝试使用 img putpixel 30 60 155 155 55 绘制一个像素 但它没有执行任何操作 from PIL import Image def newImg img
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • 是否可以强制浮点数的指数或有效数匹配另一个浮点数(Python)?

    这是我前几天试图解决的一个有趣的问题 是否可以强制一个的有效数或指数float与另一个人一样float在Python中 出现这个问题是因为我试图重新调整一些数据 以便最小值和最大值与另一个数据集匹配 然而 我重新调整后的数据略有偏差 大约小
  • Scrapy 蜘蛛无法工作

    由于到目前为止没有任何效果 我开始了一个新项目 python scrapy ctl py startproject Nu 我完全按照教程操作 创建了文件夹和一个新的蜘蛛 from scrapy contrib spiders import
  • Pandas 在特定列将数据帧拆分为两个数据帧

    I have pandas我组成的 DataFrameconcat 一行由 96 个值组成 我想将 DataFrame 从值 72 中分离出来 这样 一行的前 72 个值存储在 Dataframe1 中 接下来的 24 个值存储在 Data
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • PyQt 中的线程和信号问题

    我在 PyQt 中的线程之间进行通信时遇到一些问题 我使用信号在两个线程 发送者和监听者 之间进行通信 发送者发送消息 期望被监听者接收 但是 没有收到任何消息 谁能建议可能出了什么问题 我确信这一定很简单 但我已经环顾了几个小时但没有发现
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • 如何在 Ubuntu 18.04 上安装 Elasticsearch、Logstash 和 Kibana (Elastic Stack)

    笔者精选互联网档案馆接受捐赠作为为捐款而写程序 介绍 Elastic Stack 以前称为ELK堆栈 是由以下公司制作的开源软件集合Elastic它允许您搜索 分析和可视化从任何来源以任何格式生成的日志 这种做法称为集中记录 当尝试识别服务
  • Log4j2 示例教程 - 配置、级别、Appender

    欢迎使用 Apache Log4j2 示例教程 如果您向专家开发人员询问应用程序中最烦人的事情 答案可能与日志记录有关 如果应用程序中没有合适的日志记录 维护将是一场噩梦 大多数应用程序都会经过开发测试 单元测试 集成测试 但当涉及到生产时
  • 如何在 Debian 8 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

    介绍 LAMP 软件堆栈 包括LLinux操作系统 A阿帕奇网络服务器 MmySQL 数据库 以及PHP 脚本语言是 Web 或应用程序开发的良好基础 安装在一起后 该软件堆栈使您的服务器能够托管动态网站和 Web 应用程序 在本教程中 我
  • 如何在 Linux 上安装 TestDisk 并恢复已删除的文件

    您是否曾经遇到过不小心删除文件的情况 在本教程中 我们将介绍如何在 Linux 中安装 TestDisk 并恢复已删除的文件 在本教程中 我将使用 Ubuntu 服务器进行工作 但即使您使用任何其他发行版 也可以遵循相同的步骤 唯一不同的是
  • 将QChartView插入到ui中

    我想把在同一个 qtchart 上绘制烛台和 5 天平均线 但给出两个 x 轴图将代码写入 UI 加载器 import sys from PyQt5 QtWidgets import QApplication QWidget from Py
  • 如何将 PowerShell 变量返回到 VBScript

    我有一个 vbscript 来调用 PowerShell 脚本 希望将 PowerShell 输出返回到 HTA HTML 应用程序 GUI 现在我只想看看是否可以将 PowerShell 输出返回到 vbscript 中的 MsgBox
  • 如何找到 .bash_profile 并将其添加到 shell 的初始化文件中? [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在尝试使用 rvm 升级 ruby 上务实网站 它说 重要的部分是将以下行添加到 shell 初始化文件 bash profile 的末尾 s HOME rvm scripts rvm so
  • 卸载 RVM 后 Zshell 启动,退出状态为 1

    我刚刚卸载了rvm 我跑了rvm implode并从中删除了rvm PATH in my zshrc 如指定这个堆栈溢出帖子 卸载后 我注意到我的 shell 启动的退出状态为1 我已经使用它检查过echo 加载 shell 后 我总是得到
  • 按位异或两个数字会得到数字的和或差

    当我对任意两个数字进行异或时 我得到的是它们的差值或总和的绝对值 我在谷歌上搜索了很多 试图找到任何相关的公式 但对此没有明显的公式或陈述 Example 10 XOR 2 1010 XOR 10 1000 8 1 XOR 2 01 XOR
  • 使用for循环在画布上绘制线条

    我正在尝试用画布绘制线条 并使用 for 循环更改坐标 这是我的画布元素
  • PostgreSQL 中数组是否全部为 NULL

    如果 PostgreSQL 数组的所有元素都为 NULL 是否有一个表达式返回 TRUE 如果它是 NULL 以外的值 我当然可以使用类似以下内容的值 SELECT 4 ALL ARRAY 4 5 integer 但是我想用一个进行 ALL
  • __printflike__ 修饰符

    printflike 修饰符 到底是什么 这个词是什么意思 据猜测 它告诉编译器您正在使用的函数采用以下形式的参数 anything format 哪里的format 部分看起来像参数printf The printflike 属性允许编译
  • 像 Google 使用的滚动条

    随着 Google 推出的最新更新 所有网站都获得了自定义 JS 滚动条 至少在 Chrome 中 我最喜欢它的一点是它简单且运行完美 到目前为止 我见过的很多 JS 滚动条都不能很好地工作 也就是说 如果你滚动得非常快或者滚动并移动鼠标
  • Jquery 延迟加载与 ajax

    我在我的电子商务网站上使用lazyload 惰性加载 效果很好 我使用这段代码来做到这一点 function img lazy lazyload effect fadeIn 还有一些过滤器 如颜色 价格等 运行 ajax 并显示新结果 当新
  • SwiftUI/Combine:订阅@Binding的值变化

    我有一个带有视图模型的视图 该视图中的操作可以更改视图模型 为了能够将逻辑分解为可重用的部分 我将视图的一部分作为其自己的视图 并对其所需的值使用 Binding 现在 我希望能够根据值更改执行一些逻辑 而不必只是视图更改 我怎样才能做到这
  • 如何使用多个命令启动 cmd.exe /k?

    为什么下面的代码不改变颜色和标题cmd2 怎么做以及做什么 该命令改变颜色cmd1 并将标题设置为cmd2 start cmd exe k TITLE TEST color 02 mode con cols 160 lines 78 sta
  • Android 序列化问题

    我创建了一个类 它有几个成员变量 所有这些变量都是可序列化的 除了一个位图 我尝试扩展位图并实现可序列化 但不认为位图是最终类 我想保存该类 它基本上构成了游戏的当前状态 以便玩家可以拾取并加载游戏 在我看来 我有两个选择 1 寻找另一种保
  • 如何为 java HttpURLConnection 流量启用线路日志记录?

    我用过雅加达公共 HttpClient在另一个项目中 我也想要同样的电线记录输出但使用 标准 HttpUrlConnection 我用过Fiddler作为代理 但我想直接从 java 记录流量 捕获连接输入和输出流的内容是不够的 因为 HT
  • 如何根据 Wavefront (.obj) 文件中给出的纹理索引对纹理位置进行排序?

    我目前正在尝试为 OpenGL 项目制作一个 Wavefront obj 文件加载器 我当前使用的方法是逐行分离向量 std vectors 中的顶点位置 纹理位置和法线位置 并且我将它们的索引 顶点 纹理和法线索引 存储在三个单独的文件中
  • Kivy ObjectProperty 更新标签文本

    我正在创建一个 kivy 用户界面来显示由我编写为标准 python 对象的数据模型生成的值 本质上 我希望用户能够按下一个按钮 这将更改底层数据模型 并且此更改的结果将自动更新和显示 据我了解 这可以使用 kivy 属性 在本例中为 Ob