如何使用 PyQt5 在 Qt 中显示数学排版(MathJax、LaTeX 等)?

clo*_*tic 5 qt latex mathjax python-3.x pyqt5

我是 Qt 和 PyQt5 的新手,想在 GUI 窗口中显示数学排版。具体来说,我希望它能够动态更新。我似乎找不到有关如何使用 PyQt5 执行此操作的任何有用信息。

我已经彻底研究了如何做到这一点

一个看似相关的答案在这里找到,但没有给出解决方案,它实际上没有解决在 GUI 中显示排版数学的问题。

另一个看似相关的答案在这里找到,但使用 PySide(和 python 2.7)并给出了一个荒谬且不必要的复杂和过时的答案。

clo*_*tic 7

我想出了如何以一种非常容易和简单的方式做到这一点。下面给出的示例需要 Internet 连接才能访问 MathJax JS 模块。

  1. 首先,导入QApplicationQWebEngineView

    import sys
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWebEngineWidgets import QWebEngineView
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,编写一个包含 HTML 代码的多行字符串。代码应该导入 MathJax javascript 模块。然后,写出你的数学方程式...

    pageSource = """
                 <html><head>
                 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML">                     
                 </script></head>
                 <body>
                 <p><mathjax style="font-size:2.3em">$$u = \int_{-\infty}^{\infty}(awesome)\cdot du$$</mathjax></p>
                 </body></html>
                 """
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,实例化一个 QApplication,实例化一个 QWebEngineView,并设置 WebEngineView 来显示你新编写的 HTML 代码:

    app = QApplication(sys.argv)
    webView = QWebEngineView()
    webView.setHtml(pageSource)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 不要忘记在 WebEngineView 上调用 show。

    webView.show()
    sys.exit(app.exec_())
    
    Run Code Online (Sandbox Code Playgroud)

如果你想创建一个不需要互联网连接来运行 MathJax JS 文件的应用程序,只需复制 JS 模块并将其保存为代码中的字符串。