Matplotlib isn't only for static plots. While GUIs are typically created with GUI libraries and frameworks such as PyQt, Tkinter, Kivy and wxPython, and while Python does have excellent integration with PyQt, Tkinter and wxPython - there's no need to use any of these for some basic GUI functionality, through Matplotlib Widgets.
matplotlib.widgets module has several classes, including the
AxesWidget, out of which
TextBoxes, etc are derived. These all accept the
Axes they're being added to as the one and only mandatory constructor argument, and their positioning has to be manually set. A thing to note is that the widget is the axes, so you'll create an
Axes instance for each widget.
Another thing to note is that you have to keep references to the widgets otherwise, they might get garbage collected.
Each of them can also be disabled by setting
False, in which case, they won't respond to any events, such as being clicked on. That being said, we can introduce a new type of interactivity to our plots, through various GUI elements and components.
Note: Matplotlib isn't meant to be used for high-quality GUI creation, nor user-friendly systems. These widgets are rudimentary, don't really look great and have limited functionality. They're meant as a way to prototype and test things out, rather than actually ship them.