Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter 텍스트 상자에 LaTeX 수식을 실시간으로 렌더링하는 방법

Python의 Matplotlib 라이브러리는 데이터 포인트를 시각화하고 그래프나 플롯을 그려 데이터를 분석해야 하는 애플리케이션에서 매우 유용하게 활용됩니다. 이번 글에서는 이러한 Matplotlib의 기능을 응용하여, LaTeX 구문을 실시간으로 처리하고 화면에 렌더링할 수 있는 Tkinter 애플리케이션을 만드는 방법을 살펴보겠습니다.

LaTeX 구문은 수식, 과학적 표기법, 수학 기호, 특수 문자 등 과학·학술 문서를 작성할 때 널리 사용되는 조판 시스템입니다. 이런 LaTeX 뷰어 애플리케이션을 구축하려면 matplotlib 모듈과 TkAgg(Tkinter 환경에서 Matplotlib를 구동하기 위한 백엔드 API)가 반드시 필요합니다.

애플리케이션 구성 단계

  • Matplotlib, Tkinter, Ttk(위젯 스타일링용), TkAgg 등 필요한 라이브러리를 임포트합니다.
  • 프레임(Frame)을 추가하고, 그 안에 레이블(Label)과 입력 위젯(Entry)을 배치합니다.
  • Matplotlib의 figure() 메서드로 Figure의 크기를 정의합니다. 이 Figure는 캔버스에 수식을 플롯하는 데 사용됩니다.
  • TkAgg를 통해 Figure를 담을 Canvas 위젯을 생성합니다.
  • Entry 위젯의 내용을 가져온 뒤, Matplotlib의 내장 함수인 text()를 사용해 텍스트를 Figure로 변환하는 함수를 정의합니다.
  • Return(Enter) 키 또는 클릭 이벤트를 해당 함수에 바인딩하여, 입력 즉시 캔버스에 결과를 표시합니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# tkinter 애플리케이션의 백엔드로 TkAgg 사용
matplotlib.use('TkAgg')

# tkinter 프레임 인스턴스 생성
win = Tk()

# 창 크기 설정
win.geometry("700x350")

# 창 제목 설정
win.title("LaTex Viewer")

# Figure 출력을 생성하는 함수 정의
def graph(text):
    # Entry 위젯의 입력값 가져오기
    tmptext = entry.get()
    tmptext = "$"+tmptext+"$"
    # Figure에서 이전에 그려진 수식 지우기
    wx.clear()
    wx.text(0.2, 0.6, tmptext, fontsize = 20)
    canvas.draw()

# Frame 객체 생성
frame = Frame(win)
frame.pack()

# Entry 위젯 생성
var = StringVar()
entry = Entry(frame, width=70, textvariable=var)
entry.pack()

# 프레임에 레이블 위젯 추가
label = Label(frame)
label.pack()

# Figure 크기를 정의하고 플롯 생성
fig = matplotlib.figure.Figure(figsize=(7, 4), dpi=100)
wx = fig.add_subplot(111)
canvas = FigureCanvasTkAgg(fig, master=label)
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)

# 캔버스 Figure의 축 숨기기
wx.get_xaxis().set_visible(False)
wx.get_yaxis().set_visible(False)

# Return 키 이벤트와 함수 바인딩
win.bind('<Return>', graph)
win.mainloop()

실행 결과

위 코드를 실행하면 입력 위젯(Entry)과 Figure 플롯 영역이 함께 표시된 창이 나타납니다. 이제 입력창에 \alpha^2 + \beta^2 = \gamma^2 같은 과학·수학 표현식을 입력하고 Enter 키를 누르면, 해당 수식이 아름다운 LaTeX 형식으로 실시간으로 렌더링되어 캔버스에 출력됩니다.

Tkinter 텍스트 상자에 LaTeX 수식을 실시간으로 렌더링하는 방법

핵심 포인트 정리

  • TkAgg 백엔드: matplotlib.use('TkAgg')를 호출해야 Matplotlib의 Figure를 Tkinter 위젯 안에 삽입할 수 있습니다.
  • $ 기호 감싸기: 입력 텍스트 앞뒤에 $를 붙여야 Matplotlib가 이를 LaTeX 수식으로 해석합니다.
  • 캔버스 갱신: 새 수식을 그리기 전에 wx.clear()로 이전 내용을 지우고 canvas.draw()로 다시 그려야 깜빡임 없이 자연스럽게 업데이트됩니다.