def METHOD_NAME(self, viewer, button, data_x, data_y):
    # Get the value under the data coordinates
    try:
        # We report the value across the pixel, even though the coords
        # change halfway across the pixel
        value = viewer.get_data(int(data_x + 0.5), int(data_y + 0.5))
    except Exception:
        value = None
    pb = self.pixel_base
    fits_x, fits_y = data_x + pb, data_y + pb
    # Calculate WCS RA
    try:
        # NOTE: image function operates on DATA space coords
        image = viewer.get_image()
        if image is None:
            # No image loaded
            return
        ra_txt, dec_txt = image.pixtoradec(fits_x, fits_y,
                                           format='str', coords='fits')
    except Exception as e:
        self.logger.warning("Bad coordinate conversion: %s" % (
            str(e)))
        ra_txt = 'BAD WCS'
        dec_txt = 'BAD WCS'
    text = "RA: %s  DEC: %s  X: %.2f  Y: %.2f  Value: %s" % (
        ra_txt, dec_txt, fits_x, fits_y, value)
    self.readout.set_text(text)