визуализировать латекс/математику с помощью PySide

У меня есть небольшая программа, которая на лету отображает типизированное уравнение, используя средство «красивой печати» SymPy. Это работает нормально, но выглядит не очень профессионально. Поскольку SymPy будет создавать латекс или mml, мне было интересно, можно ли их отобразить графически с помощью виджета PySide? Мне, очевидно, нужно было бы изменить «QTextBrowser()», но на что я не уверен. Я знаю, что Nokia предоставляет QtMmlWidget, но я не уверен, что его можно использовать в PySide.

Большое спасибо и наилучшие пожелания.

from __future__ import division
import sys
import sympy

from PySide.QtGui import *
from PySide.QtCore import *
from PySide.QtXml import *

class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.browser = QTextBrowser()
        self.browser.setCurrentFont(QFont("Courier New",10,QFont.Bold))
        self.lineedit = QLineEdit("please type an expression")
        self.lineedit.selectAll()
        layout = QVBoxLayout()
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.lineedit.setFocus()
        self.connect(self.lineedit, SIGNAL("textChanged (const QString&)"),self.updateUi)

    def updateUi(self):
        text = unicode(self.lineedit.text())
        for z in range(0,9):
            text = text.replace('x'+str(z),'x^'+str(z))
            text = text.replace(')'+str(z),')^'+str(z))
            text = text.replace(str(z)+'x',str(z)+'*x')
            text = text.replace(str(z)+'(',str(z)+'*(')

        try:
            self.browser.append(sympy.printing.pretty(sympy.sympify(text)))
            self.browser.clear()
            self.browser.append(sympy.printing.pretty(sympy.sympify(text)))
        except Exception:
            if text=='': self.browser.clear()

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

person Geddes    schedule 05.03.2011    source источник


Ответы (1)


Одним из хакерских способов было бы отобразить его в QWebiew, используя что-то вроде MathJax.

Или, вдохновленный этим вопросом, вы можете использовать Модуль SVGMath для преобразования формы MathML в SVG, который затем может отображаться в виде QSvgWidget

person dbr    schedule 02.01.2012