'Register a canvas widget with this ``CanvasFrame``.  The
``CanvasFrame`` will ensure that this canvas widget is always
within the ``Canvas``\'s scrollregion.  If no coordinates are
given for the canvas widget, then the ``CanvasFrame`` will
attempt to find a clear area of the canvas for it.
:type canvaswidget: CanvasWidget
:param canvaswidget: The new canvas widget.  ``canvaswidget``
must have been created on this ``CanvasFrame``\'s canvas.
:type x: int
:param x: The initial x coordinate for the upper left hand
corner of ``canvaswidget``, in the canvas\'s coordinate
space.
:type y: int
:param y: The initial y coordinate for the upper left hand
corner of ``canvaswidget``, in the canvas\'s coordinate
space.'

def add_widget(self, canvaswidget, x=None, y=None):

    if ((x is None) or (y is None)):
        (x, y) = self._find_room(canvaswidget, x, y)
    (x1, y1, x2, y2) = canvaswidget.bbox()
    canvaswidget.move((x - x1), (y - y1))
    self._scrollwatcher.add_child(canvaswidget)
