MathTextParser:将输出适配到figsize

3

我正在使用MathTextParser在Qt中描述一些方程。因此,我从字典中获取所需的Tex字符串,使用我创建的解析器的to_rgba方法进行解析(传递通用字体大小和dpi),最后将其通过figimage交给我的QWidgetFigureCanvas
看一下:

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()

我的问题是,需要解析的方程式长度不同,而FigureCanvas的大小是固定的(因为它需要固定大小),所以有些方程式会导致图像超出图形的大小,因此某些方程式的一部分被切断/不可见,就像这个例子中一样:
被切断的方程式
我不想为每个tex字符串预定义字体大小,因为即使是用户定义的方程式(长度不可预测)也需要解析和显示。
那么,是否有办法使解析器适应例如字体大小,以便输出是固定大小的栅格化tex,而与方程式的大小/长度无关?
此外:与例如numpy/scipy相比,对我来说,matplotlib的文档似乎很难理解,因此如果有人能够评论to_rgbafigimage的工作原理,我也会非常感激。例如,关于to_rgba:下面引用的内容说明了深度的含义:
  • 深度是基线从图像底部偏移的像素数
提前感谢。

我现在做的事情(感谢同事的建议)就像是试错:我检查了to_rgba方法返回的数组形状,并根据形状重新渲染字符串,使用更大或更小的字体大小。虽然在某些情况下这需要整个东西被渲染两次或三次,但我怀疑是否有更令人满意的解决方案... - embert
你提出的解决方案是可行的,除非你有一个太大而无法适应的方程,在4号字体或更小的尺寸下呈现为页面上的蚂蚁。我可能会在那里加入一个if语句,以防字体大小变得太小,并将元素放置在QScrollArea或类似的位置。或者您还可以将其设置为链接,如果单击它,它将显示完整的图像。第三个解决方案是考虑将方程的文本作为mime数据或在右键单击时访问。祝你好运。 - phyatt
嗨,我已经放弃了“ScrollArea”的想法,而链接解决方案对我很有吸引力,如果可以轻松实现甚至作为鼠标悬停,但是有没有一种方法可以在不缓冲/保存图像到硬盘的情况下完成它? - embert
你能否使用QT内置的图像缩放功能来根据需要简单地调整图像大小?请参考http://doc.qt.digia.com/qt/widgets-imageviewer.html。 - tacaswell
@talkturkey 你最终解决了这个问题吗? - tacaswell
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接