Kivy 外部规则继承
Kivy outside rule inherence
我想指定一个特殊按钮,这样我就不必调整我使用的每个按钮,但是我希望它的事件触发不同 class 中的函数。
main.py
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.stacklayout import StackLayout
from kivy.properties import ObjectProperty
class FancyButton(Button):
imp = ObjectProperty(None)
class Important(StackLayout):
def NoInspiration(self, smile):
print("Received: {}".format(smile))
class TestApp(App):
def build(self):
pass
if __name__ == '__main__':
TestApp().run()
test.kv(工作中)
#:kivy 1.9.0
<FancyButton@Button>:
on_release: self.parent.NoInspiration(':)')
<Important>:
id: imp
FancyButton:
text: "smiley"
BoxLayout:
Important
Received: :)
test.kv(不工作)
#:kivy 1.9.0
<FancyButton>:
on_release: self.parent.NoInspiration(':)')
<Important>:
id: imp
BoxLayout:
FancyButton:
text: "smiley"
BoxLayout:
Important
在第二个test.kv中,我在FancyButton前面添加了'BoxLayout:',突然出现错误:
AttributeError: 'BoxLayout' object has no attribute 'NoInspiration'
问题
- 为什么在第二个例子中 self.parent 只引用直接父级而不是 < 重要 >?
- 如何让 on_release: 在 < FancyButton > 中指向函数 NoInspiration() ,同时保留 < Important > 中的函数?
跟进问题
将kv改成这个
<FancyButton>:
on_release: self.imp.NoInspiration(':)')
<Important>:
id: imp
BoxLayout:
FancyButton:
text: "smiley"
imp: root
BoxLayout:
Important
我想指定一个特殊按钮,这样我就不必调整我使用的每个按钮,但是我希望它的事件触发不同 class 中的函数。
main.py
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.stacklayout import StackLayout
from kivy.properties import ObjectProperty
class FancyButton(Button):
imp = ObjectProperty(None)
class Important(StackLayout):
def NoInspiration(self, smile):
print("Received: {}".format(smile))
class TestApp(App):
def build(self):
pass
if __name__ == '__main__':
TestApp().run()
test.kv(工作中)
#:kivy 1.9.0
<FancyButton@Button>:
on_release: self.parent.NoInspiration(':)')
<Important>:
id: imp
FancyButton:
text: "smiley"
BoxLayout:
Important
Received: :)
test.kv(不工作)
#:kivy 1.9.0
<FancyButton>:
on_release: self.parent.NoInspiration(':)')
<Important>:
id: imp
BoxLayout:
FancyButton:
text: "smiley"
BoxLayout:
Important
在第二个test.kv中,我在FancyButton前面添加了'BoxLayout:',突然出现错误:
AttributeError: 'BoxLayout' object has no attribute 'NoInspiration'
问题
- 为什么在第二个例子中 self.parent 只引用直接父级而不是 < 重要 >?
- 如何让 on_release: 在 < FancyButton > 中指向函数 NoInspiration() ,同时保留 < Important > 中的函数?
跟进问题
将kv改成这个
<FancyButton>:
on_release: self.imp.NoInspiration(':)')
<Important>:
id: imp
BoxLayout:
FancyButton:
text: "smiley"
imp: root
BoxLayout:
Important