gpt4 book ai didi

python - 如何在另一个 tk 小部件中使用 matplotlib 之外的 matplotlib 的 mathtext 渲染?

转载 作者:行者123 更新时间:2023-11-28 17:42:43 25 4
gpt4 key购买 nike

我知道 matplotlib 可以很容易地呈现数学表达式,例如,

txt=Text(x,y,r'$\frac{1}{2}')

这将使 x,y 处的分数 1 大于 2。但是,我不想将文本放在 x,y 处,而是想在单独的 tk 应用程序(如 Entry 或 Combobox)中使用呈现的字符串。如何从 matplotlib 的 mathtext 中获取渲染的字符串并将其放入我的 tk 小部件中?当然,我会欢迎其他选项,这些选项可以在没有 matplotlib 的情况下将 latex 字符串渲染到我的 tk 小部件中,但似乎 matplotlib 已经完成了大部分工作。

最佳答案

我无法在文档或一般的网络中真正找到该信息,但我能够通过阅读 mathtext 源代码找到解决方案。该示例将图像保存到文件中。

from matplotlib.mathtext import math_to_image
math_to_image("$\\alpha$", "alpha.png", dpi=1000, format='png')

您始终可以使用 ByteIO 并将该缓冲区用作图像文件的替换,将数据保存在内存中。或者您可以直接从以下代码示例中 data.as_array() 返回的 numpy 数组进行渲染(此代码还使用 cmap 来控制打印的数学表达式的颜色)。

from matplotlib.mathtext import MathTextParser
from matplotlib.image import imsave
parser = MathTextParser('bitmap')
data, someint = parser.parse("$\\alpha$", dpi=1000)
imsave("alpha.png",data.as_array(),cmap='gray')

更新

这是基于 Hello World 的完整 TkInter 示例!根据要求,来自 Tkinter 文档的示例。这个使用 PIL 库。

import tkinter as tk
from matplotlib.mathtext import math_to_image
from io import BytesIO
from PIL import ImageTk, Image

class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.pack()
self.createWidgets()



def createWidgets(self):

#Creating buffer for storing image in memory
buffer = BytesIO()

#Writing png image with our rendered greek alpha to buffer
math_to_image('$\\alpha$', buffer, dpi=1000, format='png')

#Remoting bufeer to 0, so that we can read from it
buffer.seek(0)

# Creating Pillow image object from it
pimage= Image.open(buffer)

#Creating PhotoImage object from Pillow image object
image = ImageTk.PhotoImage(pimage)

#Creating label with our image
self.label = tk.Label(self,image=image)

#Storing reference to our image object so it's not garbage collected,
# as TkInter doesn't store references by itself
self.label.img = image

self.label.pack(side="bottom")
self.QUIT = tk.Button(self, text="QUIT", fg="red",
command=root.destroy)
self.QUIT.pack(side="top")

root = tk.Tk()
app = Application(master=root)
app.mainloop()

关于python - 如何在另一个 tk 小部件中使用 matplotlib 之外的 matplotlib 的 mathtext 渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22179244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com