跟进问题:Kivy 外部规则固有 https://stackoverflow.com/questions/31618565/kivy-outside-rule-inherence
main.py
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.stacklayout import StackLayout
from kivy.properties import ObjectProperty
from kivy.factory import Factory
class FancyButton(Button):
imp = ObjectProperty(None)
class Important(StackLayout):
def NoInspiration(self, smile):
print("Received: {}".format(smile))
def AddFancy(self):
temp = Factory.FancyButton(text='f', imp = self.ids.imp)
self.ids.boxy.add_widget(temp)
class TestApp(App):
def build(self):
pass
if __name__ == '__main__':
TestApp().run()
test.kv
#:kivy 1.9.0
#:import App kivy.app
<FancyButton>:
on_release: self.imp.NoInspiration(':)')
<Important>:
id: imp
BoxLayout:
id: boxy
orientation: 'vertical'
FancyButton:
text: "smiley"
imp: root
Button:
text: "add fancy"
on_release: imp.AddFancy()
BoxLayout:
Important
在 test.kv 中,FancyButton 中对函数 NoInspiration() 的函数调用有效,因为 .kv 中定义的 FancyButton 有 imp: root,所以它知道应该在 : 中查找该函数。
Question
然而,当你在 Python 中通过 add_widget 创建 FancyButton 时,imp: root 是如何工作的呢?
现在,当我按下“添加花哨”按钮时,我收到错误:
文件“main.py”,第 18 行,位于 AddFancy 中
temp = Factory.FancyButton(text='f', imp = self.ids.imp)
文件“properties.pyx”,第 756 行,位于 kivy.properties.ObservableDict.__getattr __ (kivy/properties.c:11093)
AttributeError:“超级”对象没有属性“__getattr __”
跟进问题
Kivy外规则继承2 https://stackoverflow.com/questions/31626223/kivy-outside-rule-inherence-2
Widget.ids
只包含其子级的 id (http://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget.ids http://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget.ids。小部件本身的 ID 不需要,因为您可以直接传递它 - 在您的情况下使用self
,因为您是从方法内部传递对小部件的引用:
class Important(StackLayout):
def NoInspiration(self, smile):
print("Received: {}".format(smile))
def AddFancy(self):
print(self.ids) # only returns {'boxy': <weakproxy at 0000000002D119A8 to BoxLayout at 0000000002D026A8>}
self.ids.boxy.add_widget(FancyButton(text='f', imp = self)) # no need to use a factory
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)