How to make the panel detect that the operator has been executed correctly?
The add-on below demonstrates how to solves this by using a PropertyGroup that stores the state of the execution. The operator SCENE_OT_example toggles the value stored in bpy.context.scene.example_settings.success. In EXAMPLE_PT_panel  the draw() method is used to display a label depending on the value of bpy.context.scene.example_settings.success.



bl_info = {
    "name": "Example Report Operator Success",
    "author": "Robert Guetzkow",
    "version": (1, 0),
    "blender": (2, 80, 0),
    "location": "View3D &gt; Sidebar &gt; Example tab",
    "description": "Example Report Operator Success",
    "warning": "",
    "wiki_url": "",
    "category": "3D View"}

import bpy


class ExampleSettings(bpy.types.PropertyGroup):
    success: bpy.props.BoolProperty(description='Operator executed successfully.', default=False)
    executed: bpy.props.BoolProperty(description='Operator has been executed.', default=False)


class SCENE_OT_example(bpy.types.Operator):
    bl_idname = "scene.example"
    bl_label = "Example Operator"
    bl_description = "Sets the success variable."
    bl_options = {"REGISTER", "UNDO"}

    def execute(self, context):
        context.scene.example_settings.executed = True

        # Dummy function that toggles the value (True =&gt; False, False =&gt; True)
        context.scene.example_settings.success = not context.scene.example_settings.success 
        return {"FINISHED"}


class EXAMPLE_PT_panel(bpy.types.Panel):
    bl_label = "Panel 1"
    bl_category = "Example tab"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_options = {"DEFAULT_CLOSED"}

    def draw(self, context):
        layout = self.layout
        layout.operator(SCENE_OT_example.bl_idname)

        if context.scene.example_settings.executed:
            if context.scene.example_settings.success:
                layout.label(text="Operator execution successful.")
            else:
                layout.label(text="Operator execution failed.")


classes = (ExampleSettings, SCENE_OT_example, EXAMPLE_PT_panel)


def register():
    for cls in classes:
        bpy.utils.register_class(cls)
    bpy.types.Scene.example_settings = bpy.props.PointerProperty(type=ExampleSettings)


def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)
    del bpy.types.Scene.example_settings


if __name__ == "__main__":
    register()