Bu, this other question ile çok ilgilidir. Tek fark, Oluşturucu (Builder.load_string
veya Builder.load_file
) yerine Elips'i with self.canvas
ile dinamik olarak ekliyorum. Yani burada işini yapan kodudur. Eğer hareket Elips tıklayın ve değiştirmek Renk: Ben Builder
kullanmadan aynı şeyi denersenizWidget Kivy özelliklerine göre dinamik olarak eklenen ** Ellipse (Builder kullanmıyor) rengini nasıl güncellerim?
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty
from kivy.graphics import Color, Ellipse
Builder.load_string("""
<CircleWidget>:
canvas:
Color:
rgba: self.r,1,1,1
Ellipse:
pos: self.pos
size: self.size
""")
class CircleWidget(Widget):
r = NumericProperty(0)
def __init__(s, **kwargs):
s.size= [50,50]
s.pos = [100,50]
super(CircleWidget, s).__init__(**kwargs)
def on_touch_down(s, touch):
if s.collide_point(touch.x,touch.y):
s.pos = [s.pos[1],s.pos[0]] # this works
s.r = 1.0 # this also works
class TestApp(App):
def build(s):
parent = Widget()
parent.add_widget(CircleWidget())
return parent
if __name__ == '__main__':
TestApp().run()
, artık çalışmaz:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty
from kivy.graphics import Color, Ellipse
class CircleWidget(Widget):
r = NumericProperty(0)
def __init__(s, **kwargs):
s.size= [50,50]
s.pos = [100,50]
super(CircleWidget, s).__init__(**kwargs)
with s.canvas:
Color(s.r,1,1,1)
Ellipse(pos = s.pos, size = s.size)
def on_touch_down(s, touch):
if s.collide_point(touch.x,touch.y):
s.pos = [s.pos[1],s.pos[0]] # This doesn't work anymore
s.r = 1.0 # Neither do this
class TestApp(App):
def build(s):
parent = Widget()
parent.add_widget(CircleWidget())
return parent
if __name__ == '__main__':
TestApp().run()
kod çalışır ve Olay aslında denir. Daha fazla, Widget (görsel olarak açık olmasa bile) hareket ettirilir, ancak tuvalin Talimatları güncellenmez.
Herhangi bir fikrin var mı? kv lang otomatik ifadelerde özelliklerine tuval rekreasyon bağlamak çünkü
Ben de ask_update' 'deneme ve işe yaramadı. –
Cevap vermem gereken bir soru olduğunda hemen hemen verbatim stackoverflow üzerinde cevap verdi :) – Nebelhom