在kivy python中从类属性中获取值
由于在kivy python中从类属性中获取值,python,python-3.x,binding,kivy,Python,Python 3.x,Binding,Kivy,由于x是类foo的对象,我有多个类愉快地交流: class foo(EventDispatcher): def variable_input(self, *args): self.a='This is an observed value being changed' def __init__(self): self.a=StringProperty('') 现在我创建了一个对象X,作为类foo的一个实例 X=foo() 我有一个屏幕作为屏幕管理器的一部分
x
是类foo的对象,我有多个类愉快地交流:
class foo(EventDispatcher):
def variable_input(self, *args):
self.a='This is an observed value being changed'
def __init__(self):
self.a=StringProperty('')
现在我创建了一个对象X
,作为类foo的一个实例
X=foo()
我有一个屏幕
作为屏幕管理器
的一部分,其中包含一个id为vystup的标签
class Hlavne(Screen):
pass
我想做的是用X.a
作为propname在_propname
上编写函数。
如何指向属于其他类实例的值
我读过:
警告
小心“开着”。如果要在继承的属性上创建这样的回调函数,那么也不要忘记调用超类函数
但与kivy的文档一样,它并没有告诉您如何声明。kivy属性是在类级别声明的,而不是在实例中声明的。(坏)
将绑定到属性和对_属性
事件使用是两件不同的事情
from kivy.clock import Clock
from kivy.base import runTouchApp
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty
class Test(Widget):
hop = NumericProperty(0)
def __init__(self, **kwargs):
super(Test, self).__init__(**kwargs)
Clock.schedule_interval(
lambda *dt: setattr(self, 'hop', self.hop + 1), 0.1
)
# bind to property
self.bind(hop=self.bind_hop)
def on_hop(self, instance, value):
# no event, no super() necessary
# unless inherrited from "Test"
print('on_hop:', instance, value)
def bind_hop(self, instance, value):
print('bind_hop:', instance, value)
runTouchApp(Test())
您可以使用检查每个函数中的一个实例,因为instance
参数传递到提到的Kivy属性的每个事件/绑定中我将在明天检查,我承认,作为一个新的python用户,我确实发现很难理解super的语法。塔克斯now@Tomas粗略地说,想象一个类a
,其方法是a.x
。现在,使用相同的命名方法B.x
创建另一个类B
。由于B
继承自A
,因此它可以(大部分)从类A
访问所有内容,因此即使是x
方法,但是通过创建B.x
可以覆盖继承的A.x
方法的内容。要停止覆盖,即执行A.x
中的代码,您可以调用super(当前类名,当前实例).method(args)
,在这种特殊情况下,它将是super(B,self).x()。这样,您可以在新的B.x
代码之前或之后执行A.x
。
from kivy.clock import Clock
from kivy.base import runTouchApp
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty
class Test(Widget):
hop = NumericProperty(0)
def __init__(self, **kwargs):
super(Test, self).__init__(**kwargs)
Clock.schedule_interval(
lambda *dt: setattr(self, 'hop', self.hop + 1), 0.1
)
# bind to property
self.bind(hop=self.bind_hop)
def on_hop(self, instance, value):
# no event, no super() necessary
# unless inherrited from "Test"
print('on_hop:', instance, value)
def bind_hop(self, instance, value):
print('bind_hop:', instance, value)
runTouchApp(Test())