from kivy.uix.boxlayout import BoxLayout
from kivy.uix.relativelayout import RelativeLayout
from kivy.graphics.vertex_instructions import Rectangle, Line
from kivy.graphics.context_instructions import Color
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.widget import Widget
kv_test = '''
#:import Label kivy.uix.label
BoxLayout:
orientation: 'vertical'
Button:
size_hint_y: 0.15
text: 'Im not touchable'
View:
id: _view
Button:
size_hint_y: 0.15
text: 'Add Item'
on_press: _view.add_block()
'''
kv = '''
<View>:
grid: _grid
StencilView:
Scatter:
auto_bring_to_front: False
do_rotation: False
size: (10000, 10000)
pos: (-5000, -5000)
Grid:
id: _grid
AnchorLayout:
anchor_x:'left'
anchor_y:'top'
Button:
size_hint: (None, None)
size: (200,40)
text: 'Menue Dummy'
'''
class Grid(Widget):
def __init__(self, **kwargs):
super(Grid, self).__init__(**kwargs)
Clock.schedule_once(self.draw_grid)
def draw_grid(self,asdf):
with self.canvas.before:
#draw background
Color(0.616, 0.639, 0.667, mode='rgb')
Rectangle(size=self.parent.size)
#draw grid
grid_size = 10
Color(0.576, 0.600, 0.627, mode='rgb')
x_length, y_length = [int(abs(i)) for i in self.parent.size]
for i in range(0,x_length, grid_size):
Line(points=[i, 0, i, y_length])
for i in range(0,y_length, grid_size):
Line(points=[0, i, x_length, i])
Color(0.537, 0.557, 0.580, mode='rgb')
for i in range(0,x_length, grid_size*10):
Line(points=[i, 0, i, y_length], width=1.05)
for i in range(0,y_length, grid_size*10):
Line(points=[0, i, x_length, i], width=1.05)
class View(RelativeLayout):
def __init__(self, **kwargs):
super(View, self).__init__(**kwargs)
Builder.load_string(kv)
def add_block(self):
widget = Label(text='Test Label')
s = Scatter(
#auto_bring_to_front = False,
do_rotation = False,
do_scale = False,
size = (150, 150),
size_hint = (None, None),
pos = (5000, 5000))
s.add_widget(widget)
self.grid.add_widget(s)
class TestApp(App):
def build(self):
return Builder.load_string(kv_test)
if __name__ == "__main__":
TestApp().run()