Android Kivy布局语言中的Keyerror
我是kivy框架的新手,我认为我没有正确理解kv文件和python之间的id引用是如何工作的。当我用纯python编写此代码时,它按预期工作,但我正在尝试学习使用布局语言。我已经动态生成了分散小部件,需要将它们添加到布局中 在python中Android Kivy布局语言中的Keyerror,android,python,kivy,Android,Python,Kivy,我是kivy框架的新手,我认为我没有正确理解kv文件和python之间的id引用是如何工作的。当我用纯python编写此代码时,它按预期工作,但我正在尝试学习使用布局语言。我已经动态生成了分散小部件,需要将它们添加到布局中 在python中 class MainScreen(Screen): def on_enter(self): for index in xrange(numberOfWords): genColor = [255, 0
class MainScreen(Screen):
def on_enter(self):
for index in xrange(numberOfWords):
genColor = [255, 0, 0]
shuffle(genColor)
newWordWidget = WordWidget(genColor)
if newWordWidget.label.color[0] == 255 and newWordWidget.label.text != 'red': newWordWidget.trash = True
if newWordWidget.label.color[1] == 255 and newWordWidget.label.text != 'green': newWordWidget.trash = True
if newWordWidget.label.color[2] == 255 and newWordWidget.label.text != 'blue': newWordWidget.trash = True
print("Trash:" + str(newWordWidget.trash))
newWordWidget.scatter.pos = randint(0, Window.size[0]), randint(0, Window.size[1])
self.ids.widgetscreen.add_widget(newWordWidget.scatter)
kv文件:
<FloatLayout>:
ScreenManagement:
MainScreen:
<MainScreen>:
FloatLayout:
id: widgetscreen
canvas:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
:
屏幕管理:
主屏幕:
:
浮动布局:
id:widgetscreen
画布:
颜色:
rgba:1,1,1,1
矩形:
pos:self.pos
大小:self.size
我在代码行:id:widgetscreen上遇到一个keyerror。建议的元素链接方式如下所示 千伏: 让我们看看这里发生了什么。首先,在Python代码中,我们创建了一个class属性
MainScreen
,widgetscreen
,它默认为None
。然后,在我们的KV文件中,我们将MainScreen
的属性设置为wdscreen
。在KV lang中,id就像变量一样工作,因此当我们将widgetscreen
设置为wdscreen
时,实际上是将其设置为我们用idwdscreen
定义的FloatLayout。在运行时,kivy将使用适当的小部件填充Python属性
这样,您就可以从
MainScreen
中以self.widgetscreen
的身份访问widgetscreen
。您甚至不需要使用ids
建议的元素链接方式如下所示
千伏:
让我们看看这里发生了什么。首先,在Python代码中,我们创建了一个class属性MainScreen
,widgetscreen
,它默认为None
。然后,在我们的KV文件中,我们将MainScreen
的属性设置为wdscreen
。在KV lang中,id就像变量一样工作,因此当我们将widgetscreen
设置为wdscreen
时,实际上是将其设置为我们用idwdscreen
定义的FloatLayout。在运行时,kivy将使用适当的小部件填充Python属性
这样,您就可以从MainScreen
中以self.widgetscreen
的身份访问widgetscreen
。您甚至不需要使用ids
这解决了我的问题
在我最初发布的python中:
from kivy.clock import mainthread
而且
class MainScreen(Screen):
@mainthread
def on_enter(self):
id引用没有问题。问题是引用id后正在加载kv文件@mainthread
使def on_enter()
等待kv文件加载 这解决了我的问题
在我最初发布的python中:
from kivy.clock import mainthread
而且
class MainScreen(Screen):
@mainthread
def on_enter(self):
id引用没有问题。问题是引用id后正在加载kv文件
@mainthread
使def on_enter()
等待kv文件加载 不起作用。获取“ObjectProperty”未定义错误。@SteveHostetler,将ObjectProperty
添加到导入列表中。(例如,kivy.properties导入ObjectProperty的)不起作用。获取“ObjectProperty”未定义错误。@SteveHostetler,将ObjectProperty
添加到导入列表中。(例如,kivy.properties import ObjectProperty中的)这确实解决了问题,但通常认为这是不符合实际的。在大多数情况下,不鼓励使用ids
属性。这确实解决了问题,但通常认为这是不符合实际的。在大多数情况下,不鼓励使用ids
属性。