import kivy
from kivy.app import App
from kivy.uix.layout import Layout
from kivy.uix.widget import Widget
from random import random
from kivy.graphics import Color, Rectangle
kivy.require('1.8.0')
class DragLine(Widget):
def __init__(self, **kwargs):
super(DragLine, self).__init__(**kwargs)
self.grabbed = False
self.randomized = (random(), random(), random())
with self.canvas.after:
Color(*self.randomized)
self.rect = Rectangle(pos=self.pos, size=self.size)
self.bind(pos=self.redraw)
self.bind(size=self.redraw)
def redraw(self, *args):
self.rect.pos = self.pos
self.rect.size = self.size
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
self.grabbed = True
self.y = touch.y - 15
def on_touch_move(self, touch):
if self.grabbed is not False:
self.y = touch.y - 15
self.parent.do_layout()
def on_touch_up(self, touch):
if self.grabbed is not None:
self.grabbed = False
self.parent.do_layout()
class DragLayout(Layout):
def __init__(self, **kwargs):
super(DragLayout, self).__init__(**kwargs)
self.bind(
children=self._trigger_layout,
parent=self._trigger_layout,
size_hint=self._trigger_layout,
pos=self._trigger_layout,
size=self._trigger_layout)
def do_layout(self, *largs):
order = sorted(self.children, key=lambda x: self.height + x.y, reverse=True)
for i, c in enumerate(order):
if c.grabbed is False:
c.x = self.x
c.y = self.height - order.index(c) * c.height
c.width = self.width
class Drag(App):
def build(self):
cl = DragLayout()
for i in range(10):
cl.add_widget(DragLine(height=30))
return cl
if __name__ == "__main__":
Drag().run()
--
You received this message because you are subscribed to the Google Groups "Kivy users support" group.
To unsubscribe from this group and stop receiving emails from it, send an email to kivy-users+...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
def move_canvas(self, child):
self.canvas.remove(child.canvas)
self.canvas.insert(len(self.canvas.get_group(None)), child.canvas)