- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习编写 Kivy 应用程序。我创建了一个由两个网格布局组成的玩具应用程序。一个包含两个按钮,另一个包含两个标签。任务是在单击按钮时修改标签。当所有布局都在同一个 .kv 文件中时,我可以通过简单地以标准方式创建 id 和属性来非常简单地完成此操作。
当我将布局拆分为单独的 .kv 文件时,我无法做同样的事情。我想这样做,因为我实际正在进行的项目太复杂,无法包含在单个 .kv 文件中。这是我的代码:
主要的Python代码:
# filename DynamicApp.py
import kivy
kivy.require('1.9.0')
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.lang import Builder
Builder.load_file("myfirstgrid.kv")
Builder.load_file("mysecondgrid.kv")
class DynamicWidgets(RelativeLayout):
pass
class DynamicApp(App):
def build(self):
return DynamicWidgets()
if __name__ == "__main__":
DynamicApp().run()
基础 kivy 文件:
# File name: DynamicApp.kv
#:kivy 1.9.0
<DynamicWidgets>:
MyFirstGrid:
MySecondGrid:
第一个网格的 kivy
# File name: myfirstgrid.kv
#:kivy 1.9.0
<MyFirstGrid@GridLayout>
id: _my_first_grid
rows: 1
cols: 2
Label:
id: _label_1
text: "Hello World"
Label:
id: _label_2
text: "Hello World"
第二个网格的 Kivy
# File name: myseoncdgrid.kv
#:kivy 1.9.0
#:import mybutton mybutton
<MySecondGrid@GridLayout>
size_hint: 0.25, 0.25
pos_hint: {'center_x': 0.5, 'y' : 0}
rows: 1
cols: 2
MyButton:
text: 'Do it'
label_1: _label_1
MyButton:
text: 'Do it Again'
label_2: _label_2
mybutton.py 控制按钮操作,但未在此处显示,因为我无法在 MyButton 小部件中创建属性和引用,因为它给出错误 NameError: name '_label_2' is not Defined
。
我做了完全相同的策略,但将所有 kv 放在一个文件中,效果很好。
如何在其他 .kv 文件中创建对小部件的引用和属性。
我觉得我错过了一些基本的东西。
谢谢
最佳答案
根据 Kv Language 上的文档,“id 的范围仅限于其声明的规则”。这意味着标签 ID 在 <My*Grid@GridLayout>
之外无效。 。这是有道理的,因为规则可以应用于任何 UI 树中的小部件,并且它无法提前知道自身外部存在或不存在什么。
解决您的问题的方法是使用 Properties 。您可以将标签文本绑定(bind)到 StringProperty
然后当您在代码中更改它时(按下按钮),Kivy 将为您更新标签。如果您无法轻松地相互引用小部件,则可以将属性放在 App
上。对象,它始终可以在 kv 中引用为 app
.
例如(未经测试):
class DynamicApp(App):
label1 = StringProperty("Hello World")
label2 = StringProperty("Hello World")
def build(self):
return DynamicWidgets()
...
<MyFirstGrid@GridLayout>
rows: 1
cols: 2
Label:
text: app.label1
Label:
text: app.label2
...
<MySecondGrid@GridLayout>
size_hint: 0.25, 0.25
pos_hint: {'center_x': 0.5, 'y' : 0}
rows: 1
cols: 2
MyButton:
text: 'Do it'
on_press: app.label1 = "did it"
MyButton:
text: 'Do it Again'
on_press: app.label2 = "did it again"
关于python - 在单独的 .kv 文件中创建小部件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33151756/
完美的功能代码: from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import S
我尝试使用 kv_t 存储一些数据但没有成功。我也尝试过例子forum.c & kv.c。当尝试创建第二个论坛线程时,forum.c 挂起,而 kv.c 崩溃。 当我向 kv 添加 1 个项目时,kv
my %hash = two => 2, three => 3, one => 1, ; for %hash.sort(*.key)>>.kv -> ($key, $v
我正在尝试输出同一个键的 SUM 和 COUNT 。例如。给定一个包含数百万个飞机延误事件的 .csv。使用 Apache Beam (Java),我想对每架飞机的延误持续时间进行求和,并计算每架飞机
我在 Consul 上存储了这些 KV 源: config/books/ config/common/ 在我的 Spring Boot 应用程序 application.yml 中,我将其配置如下:
所以我只是使用一些示例 Kivy 文件代码,我遇到了这段允许用户在屏幕之间切换的代码: from kivy.app import App from kivy.lang import Builder f
我一辈子都想不出如何通过 KV 文件在自定义小部件上传递自定义属性。我的应用程序是一个包含 Button() 和 TestWidget() 的简单网格。 TestWidget() 有一个 String
我希望在 Kivy 中使用 SVG,但我更喜欢在 kv 文件中使用,而不是在 py 程序中。但是,当我尝试诸如 Widget: canvas.before: Svg:
我想提取网址查询参数,并且按照this forum answer的要求,我可以使用kv {} 但我想了解这是如何工作的。 这是我的字符串:param1=val1¶m2=val2&adv=val
我的 Kivy 语言文件有许多 font_size 属性,所有属性都具有相同的值,是否可以在 KV lang 中分配变量? 当前 KV 文件示例: #User ID Label:
我有一个应用程序,其固定标题中带有三个切换按钮,该标题是屏幕管理器的外部缩进布局。初始化时,导入屏幕必须显示,即 self.ids.scrn_man.current = 'import_scn",按下
我遇到了与本主题 kv incorrect 中所述相同的问题.当我使用 Builder 并加载 kv 文件时,我有正常工作的应用程序。但是当我尝试使用自动加载 kv 文件时,我只有黑屏。有人可以向我解
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试将我的小部件创建转移到 .kv 而不是我的 main.py。我怎样才能仍然引用我的 on_press 命令? painter 是另一个子部件,包含我想调用的函数,但是我不确定如何从 .kv
一直在查看文档,但找不到如何在 kv 中正确屏蔽图像。这是我的 kv 代码: : source: 'http://webserver/120x100.png' canvas.befor
我有我的 python 代码: from kivy.app import App from kivy.uix.scatter import Scatter from kivy.uix.label im
我似乎无法为一个简单的应用程序设置背景图像。我是 kivy 的新手,对 python 有点陌生。这看起来很简单,但我发现所有示例都在 .py 文件中使用 kv 语言,而不是我想学习如何使用的 .kv
我的程序的一部分涉及用户输入自己的文本。我想要一个标签更改为输入的值,该值将存储在全局变量中。 基本上发生了什么 chosen = StringProperty() : BoxLayout:
我正在学习编写 Kivy 应用程序。我创建了一个由两个网格布局组成的玩具应用程序。一个包含两个按钮,另一个包含两个标签。任务是在单击按钮时修改标签。当所有布局都在同一个 .kv 文件中时,我可以通过简
我注意到我在网上找到的大多数示例都没有外部 .kv 文件。他们在内部定义所有实例。然而他们也说拥有外部 .kv 文件是一个很好的做法。做什么比较好?如果拥有外部 .kv 文件更好,那么我应该如何使用使
我是一名优秀的程序员,十分优秀!