code: def draw_button(self, x, y, w, h, label):
          
  
          context = self.context
  
          self.draw_roundedrect(x, y, w, h)
          context.clip()
  
          # Set up the gradients
          gradient = cairo.LinearGradient(0, 0, 0, 1)
          gradient.add_color_stop_rgba(0, 0.5, 0.5, 0.5, 0.1)
          gradient.add_color_stop_rgba(1, 0.8, 0.8, 0.8, 0.9)
  #        # Transform the coordinates so the width and height are both 1
  #        # We save the current settings and restore them afterward
          context.save()
          context.scale(w, h)
          context.rectangle(0, 0, 1, 1)
          context.set_source_rgb(0, 0, 1)
          context.set_source(gradient)
          context.fill()
          context.restore()
  
          # Draw the button text
          # Center the text
          x_bearing, y_bearing, width, height, x_advance, y_advance = \
              context.text_extents(label)
  
          text_x = (w / 2.0)-(width / 2.0 + x_bearing)
          text_y = (h / 2.0)-(height / 2.0 + y_bearing) + 1
  
          # Draw the button text
          context.move_to(text_x, text_y)
          context.set_source_rgba(0, 0, 0, 1)
          context.show_text(label)
  
          # Draw the border of the button
          context.move_to(x, y)
          context.set_source_rgba(0, 0, 0, 1)
          self.draw_roundedrect(x, y, w, h)
          context.stroke()
docs: Draws a button