Я создаю приложение, которое генерирует математические выражения, отображает их и позволяет проверить, правильно ли студент упростил его. Я попробовал sympy.preview
в качестве подхода, но он не был удовлетворительным из-за необходимости установки латекса. Вот почему я решил использовать matplotlib.backends.
backend_tkagg.FigureCanvasTkAgg
в качестве опции.
В данный момент я пытаюсь создать виджет tkinter
с выражением, отображаемым сверху, и вызываю grid()
метод для него следующим образом:
from matplotlib import use
use('TkAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from tkinter import Tk
root = Tk()
fig = Figure(figsize=(5, 1), dpi=50)
ax = fig.gca()
ax.text(0.0, 0.0, "$" + r'x\sqrt{\frac{3}{4}}' + "$", fontsize=40, bbox=dict(facecolor='red', alpha=0.5))
ax.axis('off')
ax.get_xaxis().set_visible(True)
ax.get_yaxis().set_visible(True)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas_widget = canvas.get_tk_widget()
canvas_widget.grid(row=1, column=1, columnspan=3, sticky="nesw")
canvas.draw()
root.mainloop()
Есть две проблемы:
- Выражение не отображается слева, оставляя некоторый пробел.
- Выражение не помещается в виджет
Мой желаемый результат:
Я пытался изменить положение figsize
и ax.text
, но не смог найти шаблон, который делает положение изображения стабильным. Заранее спасибо за помощь.
Обновление: К счастью, мне удалось найти простое решение. Не знаю почему, но вставка fig.tight_layout(pad=0)
до canvas.draw()
решает все.