You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySimpleGui窗口中嵌入Latex或数学表达式?

在PySimpleGui中嵌入LaTeX/数学表达式的可行方法

方法1:嵌入Matplotlib画布显示LaTeX公式

利用Matplotlib对LaTeX的支持,将仅包含公式的Matplotlib画布嵌入PySimpleGui窗口,隐藏无关的坐标轴、边框等元素,只展示公式内容。

示例代码:

import PySimpleGUI as sg
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 启用Matplotlib的LaTeX支持(需系统已安装LaTeX环境)
plt.rcParams['text.usetex'] = True
plt.rcParams['font.size'] = 16

# 创建仅显示公式的Matplotlib图
fig, ax = plt.subplots(figsize=(4, 2))
ax.text(0.5, 0.5, r'$E=mc^2 \quad \sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}$',
        ha='center', va='center', fontsize=20)
# 隐藏坐标轴和边框
ax.axis('off')
plt.tight_layout()

# 构建PySimpleGui布局
layout = [
    [sg.Canvas(key='-CANVAS-')],
    [sg.Button('退出')]
]

window = sg.Window('LaTeX公式示例', layout, finalize=True)

# 将Matplotlib画布嵌入到PySimpleGui的Canvas中
canvas = FigureCanvasTkAgg(fig, window['-CANVAS-'].TKCanvas)
canvas.draw()
canvas.get_tk_widget().pack(side='top', fill='both', expand=1)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '退出':
        break

window.close()

方法2:渲染LaTeX为图片后用Image元素显示

通过Matplotlib的mathtext模块将LaTeX公式渲染为图片,再用PySimpleGui的Image元素加载显示。如果没有完整LaTeX环境,注释掉text.usetex=True后,mathtext仍支持大部分常用数学符号。

示例代码:

import PySimpleGUI as sg
import matplotlib.pyplot as plt
import io

# 渲染LaTeX公式为图片
def render_latex_to_image(latex_str, fontsize=20):
    plt.rcParams['text.usetex'] = True  # 注释此行可无需LaTeX环境
    fig, ax = plt.subplots(figsize=(4, 1))
    ax.text(0.5, 0.5, latex_str, ha='center', va='center', fontsize=fontsize)
    ax.axis('off')
    plt.tight_layout(pad=0)
    
    # 将图保存到内存中的BytesIO
    buf = io.BytesIO()
    plt.savefig(buf, format='png', bbox_inches='tight', pad_inches=0)
    buf.seek(0)
    plt.close(fig)
    return buf.getvalue()

# 生成公式图片数据
formula_data = render_latex_to_image(r'$\frac{\partial u}{\partial t} = \alpha \nabla^2 u$')

# PySimpleGui布局
layout = [
    [sg.Image(data=formula_data)],
    [sg.Button('退出')]
]

window = sg.Window('LaTeX图片示例', layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '退出':
        break

window.close()

方法3:在文本流中插入公式图片

如果需要在段落文本中嵌入公式,可以调用PySimpleGui底层的Tkinter Text组件,将渲染好的公式图片插入到文本内容中。

示例代码:

import PySimpleGUI as sg
import matplotlib.pyplot as plt
import io
from PIL import ImageTk

def render_latex_to_photoimage(latex_str, fontsize=16):
    plt.rcParams['text.usetex'] = True
    fig, ax = plt.subplots(figsize=(3, 0.8))
    ax.text(0.5, 0.5, latex_str, ha='center', va='center', fontsize=fontsize)
    ax.axis('off')
    plt.tight_layout(pad=0)
    
    buf = io.BytesIO()
    plt.savefig(buf, format='png', bbox_inches='tight', pad_inches=0)
    buf.seek(0)
    img = ImageTk.PhotoImage(file=buf)
    plt.close(fig)
    return img

# 构建布局,使用Multiline组件(底层为Tkinter Text)
layout = [
    [sg.Multiline(size=(60, 10), key='-TEXT-', disabled=True)],
    [sg.Button('插入公式'), sg.Button('退出')]
]

window = sg.Window('文本中嵌入LaTeX', layout, finalize=True)
text_widget = window['-TEXT-'].Widget

# 预渲染公式图片
formula_img = render_latex_to_photoimage(r'$\int_a^b f(x) dx = F(b) - F(a)$')

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '退出':
        break
    elif event == '插入公式':
        # 插入文本和公式图片
        text_widget.insert('end', '微积分基本定理:')
        text_widget.image_create('end', image=formula_img)
        text_widget.insert('end', '\n这是公式在文本中的示例。\n')

window.close()

内容的提问来源于stack exchange,提问作者khaled belkadhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:27:19