import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib import rcParams
import matplotlib.font_manager as fm
# 한글 폰트 설정
font_path = "C:/Windows/Fonts/malgun.ttf" # Windows의 맑은 고딕 폰트 경로
font_prop = fm.FontProperties(fname=font_path)
rcParams['font.family'] = font_prop.get_name()
class RobotMovementApp:
def __init__(self, root):
self.root = root
self.root.title("이동식 로봇 경로 표시")
self.position = [0, 0] # 로봇의 초기 위치
self.positions = [[0, 0]] # 이동 기록
# GUI 구성
self.setup_gui()
def setup_gui(self):
# 이동 명령 입력
ttk.Label(self.root, text="명령 입력 (상, 하, 좌, 우):").grid(row=0, column=0, padx=10, pady=5)
self.command_entry = ttk.Entry(self.root, width=20)
self.command_entry.grid(row=0, column=1, padx=10, pady=5)
# 버튼
self.move_button = ttk.Button(self.root, text="이동", command=self.move_robot)
self.move_button.grid(row=0, column=2, padx=10, pady=5)
# 그래프 표시 영역
self.figure, self.ax = plt.subplots(figsize=(5, 5))
self.ax.set_xlim(-10, 10)
self.ax.set_ylim(-10, 10)
self.ax.set_title("로봇 이동 경로", fontsize=14)
self.ax.grid(True)
self.plot_graph()
self.canvas = FigureCanvasTkAgg(self.figure, self.root)
self.canvas_widget = self.canvas.get_tk_widget()
self.canvas_widget.grid(row=1, column=0, columnspan=3, padx=10, pady=10)
def move_robot(self):
command = self.command_entry.get().strip()
dx, dy = 0, 0
if command == "상":
dy = 1
elif command == "하":
dy = -1
elif command == "좌":
dx = -1
elif command == "우":
dx = 1
else:
tk.messagebox.showerror("오류", "잘못된 명령입니다. 상, 하, 좌, 우 중 하나를 입력하세요.")
return
# 위치 갱신
self.position[0] += dx
self.position[1] += dy
self.positions.append(self.position[:])
# 그래프 업데이트
self.plot_graph()
self.canvas.draw()
def plot_graph(self):
self.ax.clear()
self.ax.set_xlim(-10, 10)
self.ax.set_ylim(-10, 10)
self.ax.set_title("로봇 이동 경로", fontsize=14)
self.ax.grid(True)
x, y = zip(*self.positions)
self.ax.plot(x, y, marker="o", linestyle="-", color="blue")
self.ax.text(self.position[0], self.position[1], "현재 위치", color="red", fontsize=12, fontproperties=font_prop)
if __name__ == "__main__":
root = tk.Tk()
app = RobotMovementApp(root)
root.mainloop()
'정보통신기술(ICT)' 카테고리의 다른 글
지진 강도 측정 소프트웨어 (0) | 2024.11.19 |
---|---|
초전도체에 필요한 원소(元素; element) 데이터 시뮬레이션 (0) | 2024.11.18 |
에너지 제어 시뮬레이선 파이썬 코드 (0) | 2024.11.16 |
로보틱 플라스틱 분류 알고리즘 (1) | 2024.11.15 |
한국어-영어 맞춤법 기초 검사기 (2) | 2024.11.14 |