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 __init__(self, filename, **kwargs):
        self.filename = filename
        super(KvApp, self).__init__(**kwargs)

    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.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.filename)


if __name__ == '__main__':
    import sys
    import os

    if len(sys.argv) < 2:
        print('Usage: %s filename.kv' % os.path.basename(sys.argv[0]))
        sys.exit(1)

    KvApp(filename=sys.argv[1]).run()
