2011-03-05 3 views
3

J'ai un petit programme qui rend une équation typée à la volée en utilisant la fonction «joli-impression» de SymPy. Cela fonctionne bien mais n'a pas l'air très professionnel. Comme SymPy va produire du latex ou du mml, je me demandais si cela pouvait être rendu graphiquement avec un widget PySide? Je devrais évidemment changer le 'QTextBrowser()', mais à ce que je ne suis pas sûr. Je sais que Nokia fournit QtMmlWidget mais je ne suis pas sûr si cela pourrait être utilisé par PySide.render latex/mathml avec PySide

Merci beaucoup et meilleurs voeux.

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

Répondre

0

Une façon hacky serait pour l'afficher dans un QWebiew en utilisant quelque chose comme MathJax

Ou, inspired by this question vous pouvez utiliser le SVGMath module pour convertir sous forme MathML SVG, qui peut ensuite être affiché dans une QSvgWidget