यह this other question से बहुत संबंधित है। फर्क सिर्फ इतना है कि मैं with self.canvas
के साथ गतिशील रूप दीर्घवृत्त द्वारा जोड़ा जा रहा बजाय बिल्डर (Builder.load_string
या Builder.load_file
) का उपयोग कर रहा है। तो यहाँ कोड कि काम करता है। जब आप दीर्घवृत्त यह चाल में क्लिक करें और बदलने का रंग:विजेट कीवी गुणों के अनुसार मैं ** ** गतिशील रूप से जोड़ा गया ** एलीपसे (बिल्डर का उपयोग नहीं कर रहा) का रंग कैसे अपडेट करूं?
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()
अगर मैं Builder
का उपयोग किए बिना भी ऐसा ही करने की कोशिश, इसे अब और काम नहीं करता:
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()
कोड रन और घटना वास्तव में कहा जाता है। अधिक से अधिक, विजेट स्थानांतरित हो गया है (भले ही यह स्पष्ट रूप से स्पष्ट न हो) लेकिन कैनवास के निर्देश अपडेट नहीं किए गए हैं।
कोई भी विचार?
मैं भी 'ask_update' के साथ प्रयोग और यह काम नहीं किया। –
मुझे यह पसंद है जब एक प्रश्न के लिए मुझे एक उत्तर की आवश्यकता है लगभग verbatim stackoverflow पर जवाब दिया :) – Nebelhom