정보통신기술(ICT)

1차 함수

해머슴 2024. 8. 29. 11:53
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()

'정보통신기술(ICT)' 카테고리의 다른 글

유리 함수  (0) 2024.09.05
로그 함수  (0) 2024.09.04
사인 함수  (0) 2024.09.03
3차 함수  (0) 2024.09.02
2차 함수  (0) 2024.08.30