mirror of https://github.com/kivy/kivy.git
Add an example for multiple Window.on_dropfile
This commit is contained in:
parent
87e6847008
commit
915b4fec2d
|
@ -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()
|
Loading…
Reference in New Issue