import tkinter as tk
from tkinter import ttk

planets = {
    # 太阳系八大行星
    "水星": {"分类": "太阳系行星", "直径": "4879 km", "直径数值": 4879, "质量": "3.3x10^23 kg", "公转周期": "88 天", "温度": "-180 ~ 430℃", "卫星数量": "0 颗", "特点": "距离太阳最近，表面布满陨石坑，没有大气层保护，昼夜温差悬殊，环境荒凉死寂。"},
    "金星": {"分类": "太阳系行星", "直径": "12104 km", "直径数值": 12104, "质量": "4.87x10^24 kg", "公转周期": "225 天", "温度": "平均 465℃", "卫星数量": "0 颗", "特点": "太阳系最热行星，自转方向反向，浓厚温室气体，地表高温高压。"},
    "地球": {"分类": "太阳系行星", "直径": "12742 km", "直径数值": 12742, "质量": "5.97x10^24 kg", "公转周期": "365 天", "温度": "-89 ~ 57℃", "卫星数量": "1 颗", "特点": "唯一拥有生命的星球，大气、水源、温度环境适宜。"},
    "火星": {"分类": "太阳系行星", "直径": "6779 km", "直径数值": 6779, "质量": "6.42x10^23 kg", "公转周期": "687 天", "温度": "-140 ~ 20℃", "卫星数量": "2 颗", "特点": "红色荒漠星球，拥有高山峡谷，远古曾有海洋。"},
    "木星": {"分类": "太阳系行星", "直径": "139820 km", "直径数值": 139820, "质量": "1.90x10^27 kg", "公转周期": "11.86 年", "温度": "平均 -110℃", "卫星数量": "95颗以上", "特点": "太阳系最大气态巨行星，风暴众多，磁场极强。"},
    "土星": {"分类": "太阳系行星", "直径": "116460 km", "直径数值": 116460, "质量": "5.68x10^26 kg", "公转周期": "29.46 年", "温度": "平均 -140℃", "卫星数量": "145颗以上", "特点": "标志性光环星球，密度极低，外观梦幻。"},
    "天王星": {"分类": "太阳系行星", "直径": "50724 km", "直径数值": 50724, "质量": "8.68x10^25 kg", "公转周期": "84 年", "温度": "平均 -195℃", "卫星数量": "27 颗", "特点": "侧卧自转冰巨行星，整体偏蓝绿色，环境极寒。"},
    "海王星": {"分类": "太阳系行星", "直径": "49244 km", "直径数值": 49244, "质量": "1.02x10^26 kg", "公转周期": "164.8 年", "温度": "平均 -214℃", "卫星数量": "14 颗", "特点": "太阳系最外侧行星，风暴最强，深海蓝色外观。"},
    # 自带星环天体
    "J1407b": {"分类": "带环特殊天体", "直径": "260000 km", "直径数值": 260000, "质量": "13倍木星", "公转周期": "10 年", "温度": "高温", "卫星数量": "未知", "特点": "超级光环行星，光环规模远超土星。"},
    "妊神星": {"分类": "带环特殊天体", "直径": "1560 km", "直径数值": 1560, "质量": "未知", "公转周期": "285 年", "温度": "极低严寒", "卫星数量": "2 颗", "特点": "高速自转矮行星，外形椭圆，自带星环。"},
    "夸欧尔": {"分类": "带环特殊天体", "直径": "1110 km", "直径数值": 1110, "质量": "未知", "公转周期": "288 年", "温度": "极寒", "卫星数量": "1 颗", "特点": "柯伊伯带冰冻小天体，拥有稀薄星环。"},
    # 恒星&黑洞
    "太阳": {"分类": "恒星", "直径": "1392000 km", "直径数值": 1392000, "质量": "1.99x10^30 kg", "公转周期": "无", "温度": "表面5500℃", "卫星数量": "8颗行星", "特点": "太阳系中心恒星，提供光与热，主宰星系引力。"},
    "凤凰A黑洞": {"分类": "黑洞", "直径": "380000000 km", "直径数值": 380000000, "质量": "百亿倍太阳", "公转周期": "无", "温度": "极高", "卫星数量": "海量星系", "特点": "超大质量黑洞，吞噬星体，掌控星系团。"},
    "史蒂文森2-18": {"分类": "恒星", "直径": "2996000000 km", "直径数值": 2996000000, "质量": "25倍太阳", "公转周期": "无", "温度": "3200℃", "卫星数量": "无", "特点": "超大红超巨星，体积宇宙顶尖级别。"},
    # 系外行星
    "开普勒186f": {"分类": "系外行星", "直径": "14300 km", "直径数值": 14300, "质量": "1.1倍地球", "公转周期": "130 天", "温度": "寒冷宜居", "卫星数量": "未知", "特点": "红矮星宜居带类地行星。"},
    "开普勒442b": {"分类": "系外行星", "直径": "18900 km", "直径数值": 18900, "质量": "未知", "公转周期": "112 天", "温度": "0℃左右", "卫星数量": "未知", "特点": "宜居指数极高的远方星球。"},
    "开普勒22b": {"分类": "系外行星", "直径": "30500 km", "直径数值": 30500, "质量": "未知", "公转周期": "290 天", "温度": "22℃", "卫星数量": "未知", "特点": "最早发现的宜居超级地球。"},
    "开普勒452b": {"分类": "系外行星", "直径": "20400 km", "直径数值": 20400, "质量": "5倍地球", "公转周期": "385 天", "温度": "温和宜居", "卫星数量": "未知", "特点": "地球孪生星球，环境高度相似。"},
    "比邻星b": {"分类": "系外行星", "直径": "14000 km", "直径数值": 14000, "质量": "1.27倍地球", "公转周期": "11.2 天", "温度": "-39℃", "卫星数量": "未知", "特点": "离地球最近的系外行星。"},
    "格利泽667Cc": {"分类": "系外行星", "直径": "15200 km", "直径数值": 15200, "质量": "4倍地球", "公转周期": "28 天", "温度": "温暖湿润", "卫星数量": "未知", "特点": "非常适合生命诞生的超级地球。"},
    "格利泽581g": {"分类": "系外行星", "直径": "13500 km", "直径数值": 13500, "质量": "3.1倍地球", "公转周期": "37 天", "温度": "适宜生存", "卫星数量": "未知", "特点": "稳定宜居带岩石行星。"},
    "TRAPPIST-1e": {"分类": "系外行星", "直径": "12300 km", "直径数值": 12300, "质量": "0.92倍地球", "公转周期": "6.1 天", "温度": "温和宜居", "卫星数量": "未知", "特点": "迷你地球，环境温和稳定。"},
    "55巨蟹座e": {"分类": "系外行星", "直径": "21000 km", "直径数值": 21000, "质量": "8倍地球", "公转周期": "18 小时", "温度": "2000℃以上", "卫星数量": "无", "特点": "高温钻石行星，内部富含碳元素。"},
    "HD189733b": {"分类": "系外行星", "直径": "153000 km", "直径数值": 153000, "质量": "1.13倍木星", "公转周期": "2.2 天", "温度": "930℃", "卫星数量": "无", "特点": "蓝色风暴星球，降落玻璃暴雨。"},
    "WASP-12b": {"分类": "系外行星", "直径": "190000 km", "直径数值": 190000, "质量": "1.4倍木星", "公转周期": "1.1 天", "温度": "2600℃", "卫星数量": "无", "特点": "被恒星慢慢吞噬的高热行星。"},
    # 矮行星
    "冥王星": {"分类": "矮行星", "直径": "2376 km", "直径数值": 2376, "质量": "0.002倍地球", "公转周期": "248 年", "温度": "-220℃", "卫星数量": "5 颗", "特点": "经典冰冻矮行星，地表冰雪遍布。"},
    "谷神星": {"分类": "矮行星", "直径": "950 km", "直径数值": 950, "质量": "未知", "公转周期": "4.6 年", "温度": "-100℃", "卫星数量": "0 颗", "特点": "小行星带唯一矮行星，暗藏冰水。"},
    "鸟神星": {"分类": "矮行星", "直径": "1420 km", "直径数值": 1420, "质量": "未知", "公转周期": "309 年", "温度": "极寒", "卫星数量": "1 颗", "特点": "柯伊伯带冰冻小天体。"},
    "亡神星": {"分类": "矮行星", "直径": "1500 km", "直径数值": 1500, "质量": "未知", "公转周期": "247 年", "温度": "极寒", "卫星数量": "1 颗", "特点": "黑暗寒冷的外围矮行星。"},
    "阋神星": {"分类": "矮行星", "直径": "2326 km", "直径数值": 2326, "质量": "0.003倍地球", "公转周期": "557 年", "温度": "-230℃", "卫星数量": "1 颗", "特点": "改变行星定义的遥远冰冻天体。"},
    # 巨型恒星
    "参宿四": {"分类": "恒星", "直径": "1300000000 km", "直径数值": 1300000000, "质量": "18倍太阳", "公转周期": "无", "温度": "3500℃", "卫星数量": "无", "特点": "随时可能超新星爆发的红巨星。"},
    "参宿七": {"分类": "恒星", "直径": "900000000 km", "直径数值": 900000000, "质量": "18倍太阳", "公转周期": "无", "温度": "12000℃", "卫星数量": "无", "特点": "超高亮高温蓝色巨星。"},
    "天鹅座NML": {"分类": "恒星", "直径": "1650000000 km", "直径数值": 1650000000, "质量": "20倍太阳", "公转周期": "无", "温度": "2800℃", "卫星数量": "无", "特点": "巨大红特超巨星。"},
    "大犬座VY": {"分类": "恒星", "直径": "1420000000 km", "直径数值": 1420000000, "质量": "17倍太阳", "公转周期": "无", "温度": "3400℃", "卫星数量": "无", "特点": "早期发现的超级巨型恒星。"},
    "盾牌座UY": {"分类": "恒星", "直径": "2375000000 km", "直径数值": 2375000000, "质量": "30倍太阳", "公转周期": "无", "温度": "3300℃", "卫星数量": "无", "特点": "曾经已知体积最大恒星。"},
    # 致密天体&黑洞
    "中子星": {"分类": "致密天体", "直径": "20 km", "直径数值": 20, "质量": "1.4倍太阳", "公转周期": "极快", "温度": "100万℃", "卫星数量": "无", "特点": "恒星残骸，密度极致恐怖。"},
    "恒星级黑洞": {"分类": "黑洞", "直径": "50 km", "直径数值": 50, "质量": "20倍太阳", "公转周期": "无", "温度": "极高", "卫星数量": "无", "特点": "恒星死亡坍缩形成的小型黑洞。"},
    "M87星系黑洞": {"分类": "黑洞", "直径": "600亿 km", "直径数值": 60000000000, "质量": "65亿倍太阳", "公转周期": "无", "温度": "极高", "卫星数量": "无数星系", "特点": "人类第一张实拍黑洞。"},
    # 行星卫星
    "土卫六泰坦": {"分类": "行星卫星", "直径": "5150 km", "直径数值": 5150, "质量": "0.02倍地球", "公转周期": "16 天", "温度": "-180℃", "卫星数量": "无", "特点": "拥有浓厚大气与液态湖泊的卫星。"},
    "木卫二欧罗巴": {"分类": "行星卫星", "直径": "3120 km", "直径数值": 3120, "质量": "0.01倍地球", "公转周期": "3.5 天", "温度": "-160℃", "卫星数量": "无", "特点": "冰层下藏有巨大地下海洋。"},
    "木卫四卡利斯托": {"分类": "行星卫星", "直径": "4820 km", "直径数值": 4820, "质量": "0.018倍地球", "公转周期": "17 天", "温度": "-150℃", "卫星数量": "无", "特点": "布满古老陨石坑的冰冻卫星。"},
    "木卫一伊奥": {"分类": "行星卫星", "直径": "3640 km", "直径数值": 3640, "质量": "0.015倍地球", "公转周期": "1.8 天", "温度": "-140℃", "卫星数量": "无", "特点": "太阳系火山最活跃天体。"},
    "海卫一": {"分类": "行星卫星", "直径": "2700 km", "直径数值": 2700, "质量": "0.008倍地球", "公转周期": "5.8 天", "温度": "-225℃", "卫星数量": "无", "特点": "反向公转，存在冰火山。"},
    "天卫五": {"分类": "行星卫星", "直径": "470 km", "直径数值": 470, "质量": "未知", "公转周期": "1.4 天", "温度": "-200℃", "卫星数量": "无", "特点": "地貌奇特、地形破碎的小型卫星。"},
    # 新增 赛博坦科幻天体
    "赛博坦": {"分类": "科幻天体·变形金刚母星", "直径": "18500 km", "直径数值": 18500, "质量": "6.2倍地球", "公转周期": "未知", "温度": "多变机械星球", "卫星数量": "2颗机械卫星", "特点": "变形金刚起源母星，全机械构造、金属地壳，文明高度发达，战火常年蔓延，蕴含巨大能源矩阵。"},
    "元始天尊": {"分类": "科幻天体·远古星球", "直径": "52000 km", "直径数值": 52000, "质量": "35倍地球", "公转周期": "未知", "温度": "远古核心高温", "卫星数量": "无", "特点": "变形金刚世界观远古创世星球，赛博坦的本源化身，体型无比庞大，拥有古老创世力量。"},
    "宇宙大帝": {"分类": "科幻天体·毁灭星球", "直径": "68000 km", "直径数值": 68000, "质量": "48倍地球", "公转周期": "漫游宇宙", "温度": "吞噬级高热", "卫星数量": "无", "特点": "混沌毁灭之神，可化为星球形态，吞噬行星与恒星，是游走宇宙的恐怖天灾级星球。"},
    "铁堡卫星": {"分类": "科幻天体·赛博坦卫星", "直径": "3200 km", "直径数值": 3200, "质量": "0.3倍地球", "公转周期": "22天", "温度": "机械恒温", "卫星数量": "无", "特点": "赛博坦近地军事卫星，古老铁堡要塞所在地，变形金刚高层与远古档案馆驻扎地。"},
    "锈铁星": {"分类": "科幻天体·废弃机械星", "直径": "9600 km", "直径数值": 9600, "质量": "2.1倍地球", "公转周期": "未知", "温度": "荒漠低温", "卫星数量": "无", "特点": "废弃机械废弃星球，遍地锈蚀金属与废弃机甲，是流放与荒野战场星球。"}
}


class PlanetApp:
    def __init__(self, root):
        self.root = root
        self.root.title("宇宙天体百科大全")
        self.root.geometry("800x880")
        self.root.resizable(False, False)
        self.root.config(bg="#101828")

        self.planet_keys = list(planets.keys())
        self.total_num = len(self.planet_keys)
        self.index = 0

        # 赛博风标题
        title = tk.Label(root, text="宇宙天体百科大全",
                         font=("微软雅黑", 24, "bold"),
                         bg="#101828", fg="#00d8ff")
        title.pack(pady=15)

        self.count_label = tk.Label(root, text=f"当前第 1 / 共{self.total_num}个天体",
                                    font=("微软雅黑", 12),
                                    bg="#101828", fg="#89cff0")
        self.count_label.pack(pady=5)

        # 下拉框赛博美化
        style = ttk.Style()
        style.theme_use("clam")
        style.configure("TCombobox", fieldbackground="#1f2937",
                        background="#273444", foreground="#00d8ff")

        self.selected = tk.StringVar()
        self.selected.set(self.planet_keys[0])
        combo = ttk.Combobox(root, textvariable=self.selected, values=self.planet_keys,
                             state="readonly", width=40, font=("微软雅黑", 11))
        combo.pack(pady=10)
        combo.bind("<<ComboboxSelected>>", self.refresh)

        # 按钮区域
        btn_frame = tk.Frame(root, bg="#101828")
        btn_frame.pack(pady=15)

        btn_prev = tk.Button(btn_frame, text="◀ 上一个", command=self.prev,
                             width=14, bg="#1f2937", fg="#00d8ff",
                             font=("微软雅黑", 11, "bold"), relief=tk.FLAT)
        btn_prev.pack(side="left", padx=25)

        btn_next = tk.Button(btn_frame, text="下一个 ▶", command=self.next,
                             width=14, bg="#0099cc", fg="#ffffff",
                             font=("微软雅黑", 11, "bold"), relief=tk.FLAT)
        btn_next.pack(side="right", padx=25)

        # 资料卡片 赛博深色风
        info_frame = tk.LabelFrame(root, text="天体详细资料",
                                   font=("微软雅黑", 13, "bold"),
                                   bg="#101828", fg="#00d8ff")
        info_frame.pack(fill="both", expand=True, padx=25, pady=10)

        self.text = tk.Text(info_frame, font=("微软雅黑", 12),
                            width=85, height=18, wrap="word",
                            bg="#1f2937", fg="#e0f7ff", relief=tk.FLAT, bd=3)
        self.text.pack(padx=18, pady=18)

        self.refresh()

    def prev(self):
        self.index -= 1
        if self.index < 0:
            self.index = self.total_num - 1
        self.selected.set(self.planet_keys[self.index])
        self.refresh()

    def next(self):
        self.index += 1
        if self.index >= self.total_num:
            self.index = 0
        self.selected.set(self.planet_keys[self.index])
        self.refresh()

    def refresh(self, event=None):
        name = self.selected.get()
        self.index = self.planet_keys.index(name)
        d = planets[name]

        self.count_label.config(
            text=f"当前第 {self.index+1} / 共{self.total_num}个天体")

        self.text.delete(1.0, tk.END)
        msg = f"【天体名称】{name}\n"
        msg += f"【天体分类】{d['分类']}\n\n"
        msg += f"直径：{d['直径']}\n"
        msg += f"质量：{d['质量']}\n"
        msg += f"公转周期：{d['公转周期']}\n"
        msg += f"温度：{d['温度']}\n"
        msg += f"卫星数量：{d['卫星数量']}\n\n"
        msg += f"【天体简介】\n{d['特点']}"
        self.text.insert(tk.END, msg)


if __name__ == "__main__":
    root = tk.Tk()
    app = PlanetApp(root)
    root.mainloop()
