import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
# 그래프를 그리는 함수
def plot_linear_function(a, b):
# 기존 그래프를 지우기 위해 초기화
for widget in graph_frame.winfo_children():
widget.destroy()
# 그래프를 그릴 x 범위 설정
x = np.linspace(-10, 10, 400)
y = a * x + b
# matplotlib를 사용하여 그래프 생성
fig, ax = plt.subplots(figsize=(5, 4))
ax.plot(x, y, label=f'y = {a}x + {b}')
ax.axhline(0, color='black',linewidth=1)
ax.axvline(0, color='black',linewidth=1)
ax.grid(True, which='both')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title(f'그래프: y = {a}x + {b}')
ax.legend()
# 그래프를 Tkinter 창에 포함
canvas = FigureCanvasTkAgg(fig, master=graph_frame)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
# 입력 버튼 클릭 시 실행될 함수
def on_plot_button_click():
try:
# 사용자가 입력한 값을 받아옴
a = float(entry_a.get())
b = float(entry_b.get())
plot_linear_function(a, b) # 입력 받은 값으로 그래프 그리기
error_label.config(text="") # 오류 메시지 초기화
except ValueError:
error_label.config(text="잘못된 입력입니다. 숫자를 입력하세요.")
# Tkinter 윈도우 생성
root = tk.Tk()
root.title("1차 함수 그래프")
# 창 크기 자동 조정 및 레이아웃 조정
root.geometry("700x600")
# 상단 입력 프레임 생성
input_frame = tk.Frame(root)
input_frame.pack(side=tk.TOP, fill=tk.X, padx=10, pady=10)
# a 값 입력 필드 생성
label_a = tk.Label(input_frame, text="a (기울기):")
label_a.grid(row=0, column=0, padx=5, pady=5)
entry_a = tk.Entry(input_frame)
entry_a.grid(row=0, column=1, padx=5, pady=5)
# b 값 입력 필드 생성
label_b = tk.Label(input_frame, text="b (y절편):")
label_b.grid(row=1, column=0, padx=5, pady=5)
entry_b = tk.Entry(input_frame)
entry_b.grid(row=1, column=1, padx=5, pady=5)
# 그래프 그리기 버튼 생성
plot_button = tk.Button(input_frame, text="그래프 그리기", command=on_plot_button_click)
plot_button.grid(row=2, columnspan=2, padx=5, pady=5)
# 에러 메시지 라벨
error_label = tk.Label(input_frame, text="", fg="red")
error_label.grid(row=3, columnspan=2, padx=5, pady=5)
# 하단 그래프 표시 프레임 생성
graph_frame = tk.Frame(root)
graph_frame.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True, padx=10, pady=10)
# 기본 그래프를 그리기 위해 초기화
plot_linear_function(1, 0)
# Tkinter 메인 루프 실행
root.mainloop()