[Python] window closing problem even though the code seems right

Discussão em 'Python' iniciado por Stack, Dezembro 31, 2024.

  1. Stack

    Stack Membro Participativo

    I just build a AI image generator with python and I have this problem where the window open and closes super quickly and doesn't even show the UI at all. I used tkinter for this.

    I tried some of the videos on the internet and even read the docs, but still found no solution.

    import tkinter as tk
    from tkinter import ttk
    import base64
    from PIL import Image, ImageTk
    from io import BytesIO
    from .client import StabilityClient
    from .models import GenerationRequest
    from .config import GenerationConfig
    from .exceptions import ImageGenerationError

    class ImageGeneratorUI:
    def __init__(self):
    self.client = StabilityClient(GenerationConfig())
    self.setup_ui()

    def setup_ui(self):
    self.window = tk.Tk()
    self.window.title("AI Image Generator")
    self.window.geometry("800x900")
    def run (self):
    tk.Label(self.root, text="Welcome to the Image Generator!").pack()
    self.root.mainloop()

    # Main frame
    main_frame = ttk.Frame(self.window, padding="10")
    main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))

    # Prompt input
    ttk.Label(main_frame, text="Image Description:").grid(row=0, column=0, sticky=tk.W)
    self.prompt = tk.Text(main_frame, height=3, width=60)
    self.prompt.grid(row=1, column=0, columnspan=2, pady=5)

    # Negative prompt
    ttk.Label(main_frame, text="Negative Prompt (what to avoid):").grid(row=2, column=0, sticky=tk.W)
    self.negative_prompt = tk.Text(main_frame, height=2, width=60)
    self.negative_prompt.grid(row=3, column=0, columnspan=2, pady=5)

    # Steps slider
    ttk.Label(main_frame, text="Steps:").grid(row=4, column=0, sticky=tk.W)
    self.steps = ttk.Scale(main_frame, from_=10, to=50, orient=tk.HORIZONTAL)
    self.steps.set(30)
    self.steps.grid(row=4, column=1, sticky=(tk.W, tk.E), pady=5)

    # Generate button
    self.generate_btn = ttk.Button(main_frame, text="Generate Image", command=self.generate_image)
    self.generate_btn.grid(row=5, column=0, columnspan=2, pady=10)

    # Status label
    self.status = ttk.Label(main_frame, text="")
    self.status.grid(row=6, column=0, columnspan=2)

    # Image display
    self.image_label = ttk.Label(main_frame)
    self.image_label.grid(row=7, column=0, columnspan=2, pady=10)

    def generate_image(self):
    self.generate_btn.state(['disabled'])
    self.status.config(text="Generating image...")
    self.window.update()

    try:
    request = GenerationRequest(
    prompt=self.prompt.get("1.0", tk.END).strip(),
    negative_prompt=self.negative_prompt.get("1.0", tk.END).strip() or None,
    steps=int(self.steps.get())
    )

    response = self.client.generate_image(request)

    # Display the generated image
    image_data = base64.b64decode(response.base64_image)
    image = Image.open(BytesIO(image_data))
    photo = ImageTk.PhotoImage(image)

    self.image_label.config(image=photo)
    self.image_label.image = photo # Keep a reference
    self.status.config(text="Image generated successfully!")

    except ImageGenerationError as e:
    self.status.config(text=f"Error: {str(e)}")
    except Exception as e:
    self.status.config(text=f"Unexpected error: {str(e)}")
    finally:
    self.generate_btn.state(['!disabled'])

    def run(self):
    self.window.mainloop()

    Continue reading...

Compartilhe esta Página