Aşağıdaki kodu göz önünde bulundurun. Birden çok widget örneğini, öneki değiştiğinde güncellemek istiyorum. Tüm örnekler için aynı olduğu için, yalnızca sınıf düzeyinde bir kez saklamak/güncellemek için verimli görünüyor (örneğin, kendi self.prefix'a sahip olmadığında, otomatik olarak öneki özniteliğine başvurulacaktır) Bu doğru görünüyor piton taraftan itibariyle kivy önek değişti aldığımda tanıyan sorunu var gibiKivy: Sınıf seviyesindeki (örnek) Özellikler ile olayları tetiklemek mümkün mü?
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.properties import StringProperty
import random
kivy_lang = '''
<MainWidget>:
Button:
id: my_button
text: 'increase indice'
<MyLabel>:
on_prefix: self.text = self.prefix +':'+ self.indice
on_indice: self.text = self.prefix +':'+ self.indice
'''
class MyLabel(Label):
prefix = StringProperty('1')
indice = StringProperty('0')
pass
class MainWidget(BoxLayout):
def __init__(self, **kwargs):
super(MainWidget, self).__init__(**kwargs)
self.my_label1 = MyLabel()
self.my_label2 = MyLabel()
self.add_widget(self.my_label1)
self.add_widget(self.my_label2)
self.ids.my_button.bind(on_press=self.my_method)
def my_method(self,*args,**kwargs):
MyLabel.prefix = str(random.randint(0,9))
self.my_label1.indice = str(int(self.my_label1.indice) + 1)
# my_label2 would also be updated if its 'indice' got changed as below
# self.my_label2.indice = str(int(self.my_label2.indice) + 2)
class MyApp(App):
def build(self):
Builder.load_string(kivy_lang)
return MainWidget()
if __name__ == '__main__':
MyApp().run()
, kivy taraftan görünüyor (Endeks da güncellendi ve on_indice tetiklenir çünkü my_label1 sadece güncellenir).
on_prefix tetiklemek için 'sınıf düzeyini Mülkiyet' önek değişiklik almanın bir yolu var mı?
güzel, 2 şey! (Ayrıca, AliasProperty'nin nasıl bir şekilde dokümanlardan yakalanmadığı gibi bir noktada nasıl kullanılacağını sormak istedim) :) – simplynail