2012-11-03 7 views
3

J'utilise MathTextParser pour représenter quelques équations en Qt. Par conséquent j'obtiens la chaîne de tex requise d'un dict, l'analyse en utilisant la méthode to_rgba de l'analyseur que j'ai créé (remettant une taille de police générale et ppp) et finalement la main à mon FigureCanvas du QWidget par figimage.
Jetez un oeil:MathTextParser: Ajuster la sortie à la taille

class MathWidget(QWidget): 
    def __init__(self, parent = None): 
      QWidget.__init__(self, parent) 
      ... 
      self.canvas = MathCanvas() # The FigureCanvas to display the teximage 
      ... 
      self.parser = mathtext.MathTextParser("Bitmap") 

    def render(self,metric): 
      equation = self.equations[metric] 
      rgb, d = self.parser.to_rgba(equation, color='black', fontsize=8, dpi=200) 
      self.canvas.fig.figimage(rgb.astype(float)/255., 0, 0) 
      self.canvas.draw() 

Mon problème est maintenant que les équations à analysables sont de longueur variable alors que la FigureCanvas a une taille fixe (comme il doit avoir) pour que cela arrive, que certaines équations résultat dans une image, qui dépasse le chiffre dans sa taille de sorte qu'une partie de l'équation est coupée/non visible, comme dans cet exemple:
Cut off equation
Ce que je ne voudrais pas faire est en quelque sorte de prédéfinir une fontsize pour chaque chaîne de tex dépendant de sa longueur, pour la raison que même les équations définies par l'utilisateur (de longueur imprévisible) doivent être analysées et affichées.
Donc, y a-t-il un moyen de faire correspondre l'analyseur par exemple? fontsize, de sorte que la sortie est un texte rastérisé d'une taille fixe indépendamment de l'équation taille/longueur?

En outre: En comparaison avec par ex. numpy/scipy les docs de matplotlib me semblent impénétrables pour une raison quelconque, donc si quelqu'un pouvait commenter comment to_rgba et figimage fonctionnent exactement je serais reconnaissant, aussi .. par exemple. concernant to_rgba: ce que signifie la profondeur citation élucidant suivante ?:

  • depth is the offset of the baseline from the bottom of the image in pixels

Merci à l'avance

+0

Eh bien, ce que je l'ai fait maintenant (grâce aux conseils d'un collègue) est lissée comme tâtonnement: j'ai vérifié la forme de tableaux retournés par la méthode to_rgba un en fonction de la forme que je ai rendu la chaîne, en utilisant une taille de police plus grande ou plus petite. Bien que cela exige que le tout soit rendu dans deux cas, deux fois ou trois fois, je doute qu'il y ait une solution plus satisfaisante ... – embert

+0

Votre solution proposée fonctionnerait à moins que vous ayez une équation qui était trop grande pour être mise en forme. sur la page lorsqu'il est rendu en taille 4 ou moins. J'aurais peut-être une instruction if dans là si la taille de la police devient trop petite, et placer l'élément dans un QScrollArea ou quelque chose de similaire. Ou vous pouvez également faire comme un lien, où si vous avez cliqué dessus, il afficherait l'image complète. Une troisième solution que vous pouvez considérer, est d'avoir le tex de l'équation accessible en tant que données mime ou sur un clic droit. Bonne chance. – phyatt

+0

hej, j'ai déjà rejeté l'idée 'ScrollArea', alors que la solution de lien m'appelle si elle peut être implémentée facilement peut-être même au passage de la souris, mais est-il possible de le faire sans/buffering/sauvegarder les images sur hdd? – embert

Répondre

Questions connexes