import tkinter as tk
from tkinter import messagebox

# 星座数据：(起始月日, 结束月日, 星座名, 简介)
constellations = [
    ((1, 20), (2, 18), "水瓶座", "思想前卫，富有创意，追求自由独立。"),
    ((2, 19), (3, 20), "双鱼座", "温柔浪漫，心地善良，想象力十分丰富。"),
    ((3, 21), (4, 19), "白羊座", "热情冲动，勇敢直率，做事积极有活力。"),
    ((4, 20), (5, 20), "金牛座", "稳重踏实，性格温和，注重生活品质。"),
    ((5, 21), (6, 21), "双子座", "思维敏捷，善于交际，好奇心强多变。"),
    ((6, 22), (7, 22), "巨蟹座", "温柔顾家，情感细腻，内心缺乏安全感。"),
    ((7, 23), (8, 22), "狮子座", "自信霸气，热情大方，喜欢被人关注。"),
    ((8, 23), (9, 22), "处女座", "细心严谨，追求完美，做事一丝不苟。"),
    ((9, 23), (10, 23), "天秤座", "优雅友善，追求平衡，擅长协调人际关系。"),
    ((10, 24), (11, 22), "天蝎座", "深情专一，洞察力强，性格隐忍执着。"),
    ((11, 23), (12, 21), "射手座", "乐观开朗，热爱自由，向往远方冒险。"),
    ((12, 22), (1, 19), "摩羯座", "沉稳自律，吃苦耐劳，目标感极强。")
]

def get_constellation(month, day):
    """根据月日获取星座"""
    for start, end, name, desc in constellations:
        s_month, s_day = start
        e_month, e_day = end
        # 跨年度判断（摩羯 12.22 ~ 1.19）
        if s_month > e_month:
            if (month == s_month and day >= s_day) or (month == e_month and day <= e_day):
                return name, desc
        else:
            if (month == s_month and day >= s_day) and (month == e_month and day <= e_day):
                return name, desc
    return "未知", "日期有误"

def query():
    """查询按钮事件"""
    try:
        m = int(ent_month.get())
        d = int(ent_day.get())
    except ValueError:
        messagebox.showwarning("提示", "请输入纯数字！")
        return

    if not (1 <= m <= 12) or not (1 <= d <= 31):
        messagebox.showerror("错误", "月份 1-12，日期 1-31！")
        return

    name, desc = get_constellation(m, d)
    res_label.config(text=f"你的星座：{name}")
    desc_label.config(text=f"星座简介：{desc}")

# ========== 搭建窗口 ==========
root = tk.Tk()
root.title("星座查询小程序")
root.geometry("450x300")
root.resizable(False, False)

# 标题
tk.Label(root, text="✨ 星座查询", font=("微软雅黑", 20, "bold")).pack(pady=20)

# 输入行
frame = tk.Frame(root)
frame.pack()

tk.Label(frame, text="出生月份：", font=("微软雅黑", 12)).grid(row=0, column=0, padx=5)
ent_month = tk.Entry(frame, width=8, font=("微软雅黑", 12))
ent_month.grid(row=0, column=1, padx=5)

tk.Label(frame, text="出生日期：", font=("微软雅黑", 12)).grid(row=0, column=2, padx=5)
ent_day = tk.Entry(frame, width=8, font=("微软雅黑", 12))
ent_day.grid(row=0, column=3, padx=5)

# 查询按钮
tk.Button(root, text="立即查询", command=query, font=("微软雅黑", 12),
          bg="#409EFF", fg="white", width=12).pack(pady=20)

# 结果显示
res_label = tk.Label(root, text="等待查询", font=("微软雅黑", 14, "bold"), fg="#222")
res_label.pack()

desc_label = tk.Label(root, text="", font=("微软雅黑", 11), wraplength=400)
desc_label.pack(pady=10)

root.mainloop()