Source code for posydon.visualization.VH_diagram.MathTextLabel

"""Provide LaTeX-interpreted labels in the VH diagram."""


__authors__ = [
    "Maxime Rambosson <Maxime.Rambosson@etu.unige.ch>",
]


from PyQt5 import QtGui, QtWidgets
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtCore import Qt

import matplotlib as mpl
from matplotlib.backends.backend_agg import FigureCanvasAgg


[docs]class MathTextLabel(QtWidgets.QWidget): """Custom label to display LaTeX formula.""" def __init__(self, parent=None, **kwargs): """Initialize a MathTextLabel instance.""" super(QtWidgets.QWidget, self).__init__(parent, **kwargs) layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) self._label = QtWidgets.QLabel() layout.addWidget(self._label)
[docs] def setText(self, text): """Set the diplayed text. Parameters ---------- text : str Text to display, interpreted as LaTeX formula. """ if text == "": return fig = mpl.figure.Figure() fig.patch.set_facecolor('none') fig.set_canvas(FigureCanvasAgg(fig)) renderer = fig.canvas.get_renderer() # plot the mathTex expression ax = fig.add_axes([0, 0, 1, 1]) ax.axis('off') ax.patch.set_facecolor('none') t = ax.text(0, 0, text, ha='left', va='bottom', fontsize=11) # fit figure size to text artist fwidth, fheight = fig.get_size_inches() fig_bbox = fig.get_window_extent(renderer) text_bbox = t.get_window_extent(renderer) tight_fwidth = text_bbox.width * fwidth / fig_bbox.width tight_fheight = text_bbox.height * fheight / fig_bbox.height fig.set_size_inches(tight_fwidth, tight_fheight) # convert mpl figure to QPixmap buf, size = fig.canvas.print_to_buffer() qimage = QtGui.QImage.rgbSwapped(QtGui.QImage( buf, size[0], size[1], QtGui.QImage.Format_ARGB32)) qpixmap = QtGui.QPixmap(qimage) self._label.setPixmap(qpixmap) self._label.setAlignment(Qt.AlignCenter)