diff --git a/examples/miscellaneous/multiple_dropfile.py b/examples/miscellaneous/multiple_dropfile.py new file mode 100644 index 000000000..42819a302 --- /dev/null +++ b/examples/miscellaneous/multiple_dropfile.py @@ -0,0 +1,50 @@ +from kivy.app import App +from kivy.uix.button import Button +from kivy.core.window import Window +from kivy.uix.boxlayout import BoxLayout + + +class DropFile(Button): + def __init__(self, **kwargs): + super(DropFile, self).__init__(**kwargs) + + # get app instance to add function from widget + app = App.get_running_app() + + # add function to the list + app.drops.append(self.on_dropfile) + + def on_dropfile(self, widget, filename): + # a function catching a dropped file + # if it's dropped in the widget's area + if self.collide_point(*Window.mouse_pos): + # on_dropfile's filename is bytes (py3) + self.text = filename.decode('utf-8') + + +class DropApp(App): + def build(self): + # set an empty list that will be later populated + # with functions from widgets themselves + self.drops = [] + + # bind handling function to 'on_dropfile' + Window.bind(on_dropfile=self.handledrops) + + box = BoxLayout() + dropleft = DropFile(text='left') + box.add_widget(dropleft) + dropright = DropFile(text='right') + box.add_widget(dropright) + return box + + def handledrops(self, *args): + # this will execute each function from list with arguments from + # Window.on_dropfile + # + # make sure `Window.on_dropfile` works on your system first, + # otherwise the example won't work at all + for func in self.drops: + func(*args) + +DropApp().run()