diff --git a/examples/kv/kvrun.py b/examples/kv/kvrun.py index b03b40545..e690151bc 100644 --- a/examples/kv/kvrun.py +++ b/examples/kv/kvrun.py @@ -3,13 +3,24 @@ from kivy.app import App from kivy.clock import Clock from kivy.lang import Builder +from kivy.core.window import Window class KvApp(App): def _print_fps(self, *largs): print 'FPS: %2.4f (real draw: %d)' % ( Clock.get_fps(), Clock.get_rfps()) + + def _reload_keypress(self, instance, code, *largs): + if code != 286: + return + for child in Window.children[:]: + Window.remove_widget(child) + root = Builder.load_file(self.options['filename']) + Window.add_widget(root) + def build(self): Clock.schedule_interval(self._print_fps, 1) + Window.bind(on_keyboard=self._reload_keypress) return Builder.load_file(self.options['filename']) if __name__ == '__main__': diff --git a/kivy/c_ext/graphics.pyx b/kivy/c_ext/graphics.pyx index 89b0c3f6c..58f75d77d 100644 --- a/kivy/c_ext/graphics.pyx +++ b/kivy/c_ext/graphics.pyx @@ -91,10 +91,12 @@ cdef class Canvas: cpdef add_canvas(self, Canvas canvas): if not canvas in self._children: self._children.append(canvas) + self._need_compile = 1 cpdef remove_canvas(self, Canvas canvas): if canvas in self._children: self._children.remove(canvas) + self._need_compile = 1 cdef add(self, GraphicInstruction instruction): self.need_compile = 1 diff --git a/kivy/uix/widget.py b/kivy/uix/widget.py index 76165657e..243f84c1d 100644 --- a/kivy/uix/widget.py +++ b/kivy/uix/widget.py @@ -336,7 +336,7 @@ class Widget(EventDispatcher): children = ListProperty([]) #: Parent - parent = ObjectProperty(None) + parent = ObjectProperty(None, allownone=True) #: Size hint X size_hint_x = NumericProperty(1, allownone=True)