はじめに
matplotlibを使ってtkinterにLaTeXをレンダリングする方法を紹介します。
この記事の対象者
- ある程度Pythonの知識があり、tkinterにLaTeXをレンダリングしたい。
前提知識
- 基本的なPythonの記法と仕様を理解している
- tkinterの基本的な使い方を知っている
実装
実際のコード
import tkinter as tk
import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
matplotlib.use('TkAgg')
root = tk.Tk()
fig = Figure(figsize=(5, 4), dpi=100)
ax = fig.add_subplot(111)
ax.text(0.5, 0.5, r'$x^2$', fontsize=50, horizontalalignment='center', verticalalignment='center')
ax.set_axis_off()
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack()
root.mainloop()
解説
import tkinter as tk
import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
必要なライブラリをインポートします。tkinterはウィンドウの作成、matplotlibはLaTeXのレンダリングに使います。
matplotlib.use('TkAgg')
matplotlibでtkinterのバックエンドを使用するように設定しています。
root = tk.Tk()
tkinterの親ウィンドウ(ルートウィンドウ)を作成しています。ルートウィンドウは他のウィジェットを配置する基礎となります。
fig = Figure(figsize=(5, 4), dpi=100)
matplotlibのFigure
オブジェクトを作成しています。figsize
はFigureの大きさ(インチ)を指定し、dpiは解像度(ドット/インチ)を指定しています。
ax = fig.add_subplot(111)
Figure
オブジェクトに1つのサブプロットを追加しています。add_subplot(111)
は1行1列のサブプロットレイアウトで最初(唯一)のサブプロットを作成することを意味します。
ax.text(0.5, 0.5, r'$x^2$', fontsize=50, horizontalalignment='center', verticalalignment='center')
サブプロットの中央に"$x^2$"
($x^2$)という数式を描画します。この文字列を変えることで任意の数式を描画できます。
text()
関数は特定の位置にテキストを配置するために使用されます。fontsize
でテキストのサイズを指定します。horizontalalignment
とverticalalignment
はテキストの水平方向と垂直方向の配置を指定します。
ax.set_axis_off()
サブプロットの軸(x軸とy軸)を非表示にします。
canvas = FigureCanvasTkAgg(fig, master=root)
matplotlibのFigure
オブジェクトをtkinterのCanvas
ウィジェットにマッピングするためのFigureCanvasTkAgg
オブジェクトを作成します。master=root
はこのキャンバスがルートウィンドウに配置されることを意味します。
canvas.draw()
作成したFigureCanvasTkAgg
オブジェクトにグラフの描画を行います。
canvas.get_tk_widget().pack()
tkinterのCanvas
ウィジェットをルートウィンドウに配置します。pack()
はウィジェットをウィンドウに配置するための関数です。代わりにgrid()
やplace()
を使って配置することもできます。
root.mainloop()
Tkinter のメインループを開始します。これによってウィンドウが表示されます。
終わりに
最後まで読んで頂きありがとうございます。不備があれば是非コメントで指摘して下さい。