import tkinter as tk
import turtle

# 公共绘图工具函数
def draw_cloud(t, x, y, fill_color="white"):
    t.penup()
    t.goto(x, y)
    t.pendown()
    t.color(fill_color, fill_color)
    t.begin_fill()
    t.circle(30)
    t.end_fill()
    t.penup()
    t.goto(x + 25, y + 10)
    t.pendown()
    t.begin_fill()
    t.circle(35)
    t.end_fill()
    t.penup()
    t.goto(x + 50, y)
    t.pendown()
    t.begin_fill()
    t.circle(30)
    t.end_fill()

def draw_snowflake(t, x, y):
    t.penup()
    t.goto(x, y)
    t.pendown()
    for _ in range(6):
        t.forward(10)
        t.backward(10)
        t.left(60)

# 各类天气绘制函数（修复清除逻辑）
def draw_sunny(canvas):
    screen = turtle.TurtleScreen(canvas)
    screen.clear()  # 用turtle屏幕清空，替代canvas.clear()
    screen.bgcolor("#87CEEB")
    t = turtle.RawTurtle(canvas)
    t.speed(0)
    t.hideturtle()

    # 太阳
    t.penup()
    t.goto(200, 150)
    t.pendown()
    t.color("yellow", "yellow")
    t.begin_fill()
    t.circle(50)
    t.end_fill()
    t.pensize(3)
    for _ in range(8):
        t.penup()
        t.goto(200, 150)
        t.pendown()
        t.forward(80)
        t.backward(80)
        t.left(45)
    draw_cloud(t, -150, 100)
    draw_cloud(t, -200, 50)
    # 草地
    t.penup()
    t.goto(-400, -200)
    t.pendown()
    t.color("green")
    t.begin_fill()
    t.goto(400, -200)
    t.goto(400, -300)
    t.goto(-400, -300)
    t.goto(-400, -200)
    t.end_fill()

def draw_rainy(canvas):
    screen = turtle.TurtleScreen(canvas)
    screen.clear()
    screen.bgcolor("#4A4A4A")
    t = turtle.RawTurtle(canvas)
    t.speed(0)
    t.hideturtle()
    draw_cloud(t, -100, 200, "#333333")
    draw_cloud(t, 100, 180, "#333333")
    draw_cloud(t, 0, 220, "#333333")
    # 雨滴
    t.pensize(2)
    t.color("deepskyblue")
    for x in range(-300, 300, 40):
        for y in range(50, 200, 30):
            t.penup()
            t.goto(x, y)
            t.pendown()
            t.goto(x + 5, y - 20)
    # 小红伞
    t.penup()
    t.goto(0, -50)
    t.pendown()
    t.color("black", "red")
    t.begin_fill()
    t.circle(60, 180)
    t.end_fill()
    t.pensize(3)
    t.color("black")
    t.goto(0, -150)

def draw_snowy(canvas):
    screen = turtle.TurtleScreen(canvas)
    screen.clear()
    screen.bgcolor("#DDEAF7")
    t = turtle.RawTurtle(canvas)
    t.speed(0)
    t.hideturtle()
    t.pensize(2)
    t.color("white")
    for x in range(-300, 300, 50):
        for y in range(100, 250, 40):
            draw_snowflake(t, x, y)
    # 雪人
    t.penup()
    t.goto(-150, -100)
    t.pendown()
    t.color("white", "white")
    t.begin_fill()
    t.circle(30)
    t.end_fill()
    t.penup()
    t.goto(-150, -160)
    t.pendown()
    t.begin_fill()
    t.circle(50)
    t.end_fill()
    t.color("black")
    t.penup()
    t.goto(-160, -90)
    t.dot(5)
    t.goto(-140, -90)
    t.dot(5)
    t.penup()
    t.goto(-150, -105)
    t.pendown()
    t.setheading(-60)
    t.forward(15)
    # 雪地
    t.penup()
    t.goto(-400, -250)
    t.pendown()
    t.color("white", "white")
    t.begin_fill()
    t.goto(400, -250)
    t.goto(400, -300)
    t.goto(-400, -300)
    t.goto(-400, -250)
    t.end_fill()

def draw_storm(canvas):
    screen = turtle.TurtleScreen(canvas)
    screen.clear()
    screen.bgcolor("#1C1C1C")
    t = turtle.RawTurtle(canvas)
    t.speed(0)
    t.hideturtle()
    draw_cloud(t, -100, 200, "#111111")
    draw_cloud(t, 100, 180, "#111111")
    draw_cloud(t, 0, 230, "#111111")
    # 闪电
    t.pensize(5)
    t.color("yellow")
    t.penup()
    t.goto(0, 180)
    t.pendown()
    t.goto(-30, 100)
    t.goto(20, 80)
    t.goto(-10, 0)
    t.goto(10, -50)
    # 大雨滴
    t.pensize(2)
    t.color("blue")
    for x in range(-300, 300, 50):
        for y in range(0, 150, 35):
            t.penup()
            t.goto(x, y)
            t.pendown()
            t.goto(x + 5, y - 25)

def draw_cloudy(canvas):
    screen = turtle.TurtleScreen(canvas)
    screen.clear()
    screen.bgcolor("#B0C4DE")
    t = turtle.RawTurtle(canvas)
    t.speed(0)
    t.hideturtle()
    draw_cloud(t, -150, 150)
    draw_cloud(t, 0, 180)
    draw_cloud(t, 150, 140)

def draw_foggy(canvas):
    screen = turtle.TurtleScreen(canvas)
    screen.clear()
    screen.bgcolor("#D3D3D3")
    t = turtle.RawTurtle(canvas)
    t.speed(0)
    t.hideturtle()
    t.color("#A9A9A9", "#A9A9A9")
    for y in range(-50, 100, 30):
        t.penup()
        t.goto(-350, y)
        t.pendown()
        t.begin_fill()
        t.goto(350, y)
        t.goto(350, y + 20)
        t.goto(-350, y + 20)
        t.goto(-350, y)
        t.end_fill()
    # 朦胧太阳
    t.penup()
    t.goto(250, 200)
    t.pendown()
    t.color("#FFD700", "#FFD700")
    t.begin_fill()
    t.circle(40)
    t.end_fill()

# 构建GUI主窗口
def create_gui():
    root = tk.Tk()
    root.title("天气插画生成器")
    root.geometry("900x700")

    # 顶部按钮区域
    btn_frame = tk.Frame(root)
    btn_frame.pack(pady=10)

    tk.Button(btn_frame, text="晴天", width=8, command=lambda: draw_sunny(canvas)).grid(row=0, column=0, padx=5)
    tk.Button(btn_frame, text="雨天", width=8, command=lambda: draw_rainy(canvas)).grid(row=0, column=1, padx=5)
    tk.Button(btn_frame, text="雪天", width=8, command=lambda: draw_snowy(canvas)).grid(row=0, column=2, padx=5)
    tk.Button(btn_frame, text="雷暴", width=8, command=lambda: draw_storm(canvas)).grid(row=0, column=3, padx=5)
    tk.Button(btn_frame, text="多云", width=8, command=lambda: draw_cloudy(canvas)).grid(row=0, column=4, padx=5)
    tk.Button(btn_frame, text="雾天", width=8, command=lambda: draw_foggy(canvas)).grid(row=0, column=5, padx=5)

    # 绘图画布
    canvas = tk.Canvas(root, width=850, height=600, bg="white")
    canvas.pack()

    root.mainloop()

if __name__ == "__main__":
    create_gui()