1 Exporter#

Danger

In case you do not know how our GUI handles plugins, please take a quick look at the part Developing Plugins in our Readme.

1.1 Export displayed annotations#

Using the working example

The code below shows a working example. To run it:

  • create a file, which keeps the code containing the CustomExporter class

  • download our example CSV

  • in a separate file execute the following code snippet and then load data as shown in our exemplary video:

from mad_gui import start_gui
from mad_gui.plugins import ExampleImporter
from my_exporter import CustomExporter # you need to create this file and class, see below

start_gui(plugins=[ExampleImporter, CustomExporter])

Upon pressing the Export data button in the GUI, the ExportResultsDialog will be opened, in which your exporter can be selected. Basically, you will receive a GlobalData object, which keeps all the data form the GUI and you can process / export it in whatever way you want:

import warnings
from mad_gui import start_gui, BaseExporter, BaseSettings
from mad-gui.models import GlobalData

class CustomExporter(BaseExporter):
    @classmethod
    def name(cls) -> str:
        # This will be shown as string in the dropdown menu of
        # mad_gui.components.dialogs.ExportResultsDialog upon pressing
        # the button "Export data" in the GUI
        warnings.warn("Please give your exporter a meaningful name.")
        return "Custom exporter"

    def process_data(self, global_data: GlobalData):
        # Here you can do whatever you like with our global data.
        # See the API Reference for more information about our GlobalData object
        # Here is an example on how to export all annotations and their descriptions:
        directory = QFileDialog().getExistingDirectory(
            None, "Save .csv results to this folder", str(Path(global_data.data_file).parent)
        )
        for plot_name, plot_data in global_data.plot_data.items():
            for label_name, annotations in plot_data.annotations.items():
                if len(annotations.data) == 0:
                    continue
                annotations.data.to_csv(
                    directory + os.sep
                    + plot_name.replace(" ", "_")
                    + "_"
                    + label_name.replace(" ", "_")
                    + ".csv"
                )

        UserInformation.inform(f"The results were saved to {directory}.")

Adapting the working example

After creating your exporter, make sure to also pass it to the start_gui function as plugin, as we describe it in the Readme, section Developing plugins.