티스토리 뷰

import tkinter as tk


class OptionMenu:
    width = 90
    font = ("Ubuntu", 12)
    side = "top"

    label = None
    menus = list()

    @classmethod
    def create_menus(cls, win, menus):
        cls.menus = [{"menu": OptionMenu(option_list=menu, win=win, index=i), "text": menu[0]} for i, menu in enumerate(menus)]
        OptionMenu.add_label()

    def __init__(self, option_list=None, win=None, index=None):
        self.option_list = option_list
        self.var = tk.StringVar(win)
        self.var.set(self.option_list[0])
        self.var.trace("w", self.callback)

        self.index = index
        self.menu = tk.OptionMenu(win, self.var, *self.option_list)
        self.menu.config(width=OptionMenu.width, font=OptionMenu.font)
        self.menu.pack(side=OptionMenu.side)

    def callback(self, *args):
        OptionMenu.menus[self.index]["text"] = self.var.get()
        OptionMenu.set_label()

    @classmethod
    def add_label(cls):
        cls.label = tk.Label(text="", font=cls.font, fg='blue')
        cls.label.pack(side="top")

    @classmethod
    def set_label(cls):
        texts = [menu["text"] for menu in cls.menus]
        dress = Fashion.get_dress(texts)
        cls.label.configure(text=dress)


class Fashion:
    season = None
    temperature = None
    is_accessories = None
    is_comfortable = None
    is_outer = None

    options = [
        ("봄", "여름", "가을", "겨울"),
        ("따뜻한", "시원한"),
        ("악세사리 착용", "악세사리 없음"),
        ("편안한 신발", "편안하지 않은 신발"),
        ("겉옷 착용", "겉옷 없음"),
    ]

    tops = {
        "봄": {"따뜻한": "빨간색 긴팔", "시원한": "흰색 긴팔"},
        "여름": {"따뜻한": "빨간색 반팔", "시원한": "흰색 반팔"},
        "가을": {"따뜻한": "빨간색 니트", "시원한": "파란색 니트"},
        "겨울": {"따뜻한": "빨간색 목폴라", "시원한": "파란색 니트"},
    }
    bottoms = {
        "봄": {"따뜻한": "진한 청바지", "시원한": "연한 청치마"},
        "여름": {"따뜻한": "베이지 면치마", "시원한": "연한 숏 청바지"},
        "가을": {"따뜻한": "베이지 긴바지", "시원한": "하늘색 원피스"},
        "겨울": {"따뜻한": "베이지 긴바지", "시원한": "체크무늬 롱셔츠"},
    }
    accessories = {
        "봄": {"따뜻한": "검정 에코백", "시원한": "네이비 캡"},
        "여름": {"따뜻한": "흰색 캡", "시원한": "하늘색 팔찌"},
        "가을": {"따뜻한": "갈색 머플러", "시원한": "베이지 머플러"},
        "겨울": {"따뜻한": "갈색 머플러", "시원한": "검정 머플러"},
    }
    outers = {
        "봄": "트렌치코트",
        "여름": "흰색 롱셔츠",
        "가을": "트렌치코트",
        "겨울": "베이지울코트",
    }
    shoes = {
        "봄": {"따뜻한": {"편안한 신발": "흰색 캔버스", "편안하지 않은 신발": "갈색워커"},
              "시원한": {"편안한 신발": "검정 캔버스", "편안하지 않은 신발": "검정 로퍼"}, },

        "여름": {"따뜻한": {"편안한 신발": "흰색 캔버스", "편안하지 않은 신발": "검정 구두"},
               "시원한": {"편안한 신발": "흰색 샌들", "편안하지 않은 신발": "흰색 워커"}, },

        "가을": {"따뜻한": {"편안한 신발": "검정 캔버스", "편안하지 않은 신발": "검정 구두"},
               "시원한": {"편안한 신발": "흰색 캔버스", "편안하지 않은 신발": "검정 로퍼"}, },

        "겨울": {"따뜻한": {"편안한 신발": "검정 캔버스", "편안하지 않은 신발": "검정 구두"},
               "시원한": {"편안한 신발": "흰색 캔버스", "편안하지 않은 신발": "검정 워커"}, },
    }

    @classmethod
    def convert(cls, words):
        cls.season, cls.temperature, cls.is_accessories, cls.is_comfortable, cls.is_outer = words

    @classmethod
    def get_dress(cls, words):
        cls.convert(words)
        top = cls.tops[cls.season][cls.temperature]
        bottom = cls.bottoms[cls.season][cls.temperature]
        accessory = cls.accessories[cls.season][cls.temperature] if "없음" not in cls.is_accessories else "없음"
        outer = cls.outers[cls.season] if "없음" not in cls.is_outer else "없음"
        shoe = cls.shoes[cls.season][cls.temperature][cls.is_comfortable]

        return f"상의: {top}\n하의: {bottom}\n악세사리: {accessory}\n겉옷: {outer}\n신발: {shoe}"


app = tk.Tk()
app.title("Fashion")
app.geometry('400x250')
OptionMenu.create_menus(app, Fashion.options)
app.mainloop()

댓글