import tkinter as tk
from tkinter import messagebox
import time
import threading
class FactorySimulation:
def __init__(self, master):
self.master = master
self.master.title("협동형 로봇 작업 시뮬레이션")
self.master.geometry("500x400")
self.robot_count = tk.IntVar(value=2)
self.workload = tk.IntVar(value=0)
self.progress = {}
# GUI 구성
tk.Label(master, text="로봇 수 (2~4):").pack(pady=5)
tk.Entry(master, textvariable=self.robot_count).pack(pady=5)
tk.Label(master, text="작업량 (부품 수):").pack(pady=5)
tk.Entry(master, textvariable=self.workload).pack(pady=5)
self.start_button = tk.Button(master, text="작업 시작", command=self.start_simulation)
self.start_button.pack(pady=10)
self.reset_button = tk.Button(master, text="초기화", command=self.reset_simulation)
self.reset_button.pack(pady=5)
self.status_frame = tk.Frame(master)
self.status_frame.pack(pady=10, fill="both", expand=True)
def start_simulation(self):
robot_count = self.robot_count.get()
workload = self.workload.get()
if not (2 <= robot_count <= 4):
messagebox.showerror("입력 오류", "로봇 수는 2에서 4 사이여야 합니다.")
return
if workload <= 0:
messagebox.showerror("입력 오류", "작업량은 1 이상이어야 합니다.")
return
# 초기화
self.reset_simulation()
# 작업 상태 표시 초기화
for i in range(1, robot_count + 1):
progress_label = tk.Label(self.status_frame, text=f"로봇 {i}: 대기 중")
progress_label.pack(pady=2)
self.progress[i] = progress_label
# 작업 시작 (스레드로 작업 처리)
threading.Thread(target=self.run_simulation, args=(robot_count, workload)).start()
def run_simulation(self, robot_count, workload):
tasks_per_robot = workload // robot_count
extra_tasks = workload % robot_count
for robot in range(1, robot_count + 1):
tasks = tasks_per_robot + (1 if robot <= extra_tasks else 0)
self.progress[robot].config(text=f"로봇 {robot}: 작업 시작 (총 {tasks}개)")
for task in range(1, tasks + 1):
time.sleep(0.5) # 작업 소요 시간 시뮬레이션
self.progress[robot].config(text=f"로봇 {robot}: {task}/{tasks} 작업 완료")
self.progress[robot].config(text=f"로봇 {robot}: 작업 완료")
def reset_simulation(self):
for widget in self.status_frame.winfo_children():
widget.destroy()
self.progress.clear()
# GUI 실행
if __name__ == "__main__":
root = tk.Tk()
app = FactorySimulation(root)
root.mainloop()
'정보통신기술(ICT)' 카테고리의 다른 글
파이썬 소프트웨어: 핵 융합 엔진 제어 소프트웨어 (0) | 2024.11.24 |
---|---|
파이썬 소프트웨어: 거리와 속도와 시간 (0) | 2024.11.23 |
배터리 충전량 소프트웨어 (0) | 2024.11.21 |
문자를 숫자로 변환하는 파이썬 GUI 프로그램 (1) | 2024.11.20 |
지진 강도 측정 소프트웨어 (0) | 2024.11.19 |