Quick search


New in version 1.8.0.


This is experimental and subject to change as long as this warning notice is present.

This is a widget that runs itself and all of its children in a Sandbox. That means if a child raises an Exception, it will be caught. The Sandbox itself runs its own Clock, Cache, etc.

The SandBox widget is still experimental and required for the Kivy designer. When the user designs their own widget, if they do something wrong (wrong size value, invalid python code), it will be caught correctly without breaking the whole application. Because it has been designed that way, we are still enhancing this widget and the kivy.context module. Don’t use it unless you know what you are doing.

class kivy.uix.sandbox.Sandbox(**kwargs)[source]

Bases: kivy.uix.floatlayout.FloatLayout

Sandbox widget, used to trap all the exceptions raised by child widgets.

add_widget(*args, **kwargs)[source]

Add a new widget as a child of this widget.

widget: Widget

Widget to add to our list of children.

index: int, defaults to 0

Index to insert the widget in the list. Notice that the default of 0 means the widget is inserted at the beginning of the list and will thus be drawn on top of other sibling widgets. For a full discussion of the index and widget hierarchy, please see the Widgets Programming Guide.

New in version 1.0.5.

canvas: str, defaults to None

Canvas to add widget’s canvas to. Can be ‘before’, ‘after’ or None for the default canvas.

New in version 1.9.0.

>>> from kivy.uix.button import Button
>>> from kivy.uix.slider import Slider
>>> root = Widget()
>>> root.add_widget(Button())
>>> slider = Slider()
>>> root.add_widget(slider)
clear_widgets(*args, **kwargs)[source]

Remove all (or the specified) children of this widget. If the ‘children’ argument is specified, it should be a list (or filtered list) of children of the current widget.

Changed in version 1.8.0: The children argument can be used to specify the children you want to remove.

Changed in version 2.1.0: Specifying an empty children list leaves the widgets unchanged. Previously it was treated like None and all children were removed.


Override this method in order to load your kv file or do anything else with the newly created context.

on_exception(exception, _traceback=None)[source]

Override this method in order to catch all the exceptions from children.

If you return True, it will not reraise the exception. If you return False, the exception will be raised to the parent.

on_motion(etype, me)

Called when a motion event is received.

etype: str

Event type, one of “begin”, “update” or “end”

me: MotionEvent

Received motion event


bool True to stop event dispatching

New in version 2.1.0.


This is an experimental method and it remains so while this warning is present.


Receive a touch down event.

touch: MotionEvent class

Touch received. The touch is in parent coordinates. See relativelayout for a discussion on coordinate systems.


bool If True, the dispatching of the touch event will stop. If False, the event will continue to be dispatched to the rest of the widget tree.


Receive a touch move event. The touch is in parent coordinates.

See on_touch_down() for more information.


Receive a touch up event. The touch is in parent coordinates.

See on_touch_down() for more information.

remove_widget(*args, **kwargs)[source]

Remove a widget from the children of this widget.

widget: Widget

Widget to remove from our children list.

>>> from kivy.uix.button import Button
>>> root = Widget()
>>> button = Button()
>>> root.add_widget(button)
>>> root.remove_widget(button)