import tkinter as tk
from tkinter import messagebox

# 星座日期划分 (月,日)
constellation_dates = [
    ((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), "摩羯座")
]

# 生肖顺序 鼠牛虎兔龙蛇马羊猴鸡狗猪
zodiac_list = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]

def get_constellation(month, day):
    """根据月日获取星座"""
    for start, end, name in constellation_dates:
        s_month, s_day = start
        e_month, e_day = end
        # 跨12月~1月特殊处理摩羯
        if s_month > e_month:
            if (month == s_month and day >= s_day) or (month == e_month and day <= e_day):
                return name
        else:
            if (month == s_month and day >= s_day) and (month == e_month and day <= e_day):
                return name
    return "输入日期有误"

def get_zodiac(year):
    """根据年份算生肖，1900为鼠年基准"""
    if year < 1900:
        return "年份过小无法查询"
    idx = (year - 1900) % 12
    return zodiac_list[idx]

def query():
    """查询按钮主逻辑"""
    try:
        year = int(entry_year.get())
        month = int(entry_month.get())
        day = int(entry_day.get())
        if not (1 <= month <= 12 and 1 <= day <= 31):
            messagebox.showerror("错误", "月份1-12，日期1-31！")
            return
        star = get_constellation(month, day)
        sx = get_zodiac(year)
        res_text.set(f"生肖：{sx}\n星座：{star}")
    except ValueError:
        messagebox.showerror("输入错误", "请填写纯数字年月日！")

def clear_all():
    """清空输入与结果"""
    entry_year.delete(0, tk.END)
    entry_month.delete(0, tk.END)
    entry_day.delete(0, tk.END)
    res_text.set("查询结果")

# 窗口搭建
root = tk.Tk()
root.title("生肖星座查询器")
root.geometry("420x280")
root.resizable(False, False)

# 标题
tk.Label(root, text="✨ 星座生肖一键查询 ✨", font=("微软雅黑", 16, "bold")).pack(pady=15)

# 输入行框架
frame_in = tk.Frame(root)
frame_in.pack()

tk.Label(frame_in, text="出生年份：").grid(row=0, column=0, padx=3)
entry_year = tk.Entry(frame_in, width=8, font=("Arial",12))
entry_year.grid(row=0, column=1, padx=3)

tk.Label(frame_in, text="月份：").grid(row=0, column=2, padx=3)
entry_month = tk.Entry(frame_in, width=4, font=("Arial",12))
entry_month.grid(row=0, column=3, padx=3)

tk.Label(frame_in, text="日期：").grid(row=0, column=4, padx=3)
entry_day = tk.Entry(frame_in, width=4, font=("Arial",12))
entry_day.grid(row=0, column=5, padx=3)

# 结果显示
res_text = tk.StringVar(value="查询结果")
label_res = tk.Label(root, textvariable=res_text, font=("黑体",14), fg="#d02020")
label_res.pack(pady=20)

# 按钮组
frame_btn = tk.Frame(root)
frame_btn.pack()

tk.Button(frame_btn, text="开始查询", command=query, width=10, font=("微软雅黑",11)).grid(row=0,column=0,padx=8)
tk.Button(frame_btn, text="清空重填", command=clear_all, width=10, font=("微软雅黑",11)).grid(row=0,column=1,padx=8)

root.mainloop()