from io import BytesIO import PIL.Image, PIL.ImageTk import requests from threading import Thread from tkinter import * from tkinter import ttk from .parser import FembooruClient client = FembooruClient() page = 1 root = Tk() root.geometry('640x480') root.title('Fembooru Browser') root.resizable(0, 0) root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) root.rowconfigure(1, weight=8) root.rowconfigure(2, weight=1) tagline = StringVar() ttk.Label(root, textvariable=tagline).grid(column=0, row=0, sticky=W) gallery = ttk.Frame(root) labels = [] captions = [] for y in range(3): gallery.columnconfigure(y, weight=1) for x in range(3): gallery.rowconfigure(x, weight=1) captions.append(StringVar()) i = x + y*3 labels.append(ttk.Label(gallery, textvariable=captions[i])) labels[i].grid(column=x, row=y) gallery.grid(column=0, row=1, sticky=NS+EW) nav = ttk.Frame(root) nav.columnconfigure(0, weight=1) nav.columnconfigure(1, weight=1) progress = ttk.Progressbar(nav, orient="horizontal", mode="indeterminate") progress.grid(column=0, row=0) progress_label = ttk.Label(nav, text="Connecting...") progress_label.grid(column=1, row=0) nav.grid(column=0, row=2, sticky=EW) progress.start() def nav_layout(): progress.destroy() progress_label.destroy() nav.columnconfigure(2, weight=1) nav.columnconfigure(3, weight=1) ttk.Button(nav, text="<<").grid(column=0, row=0) ttk.Button(nav, text="<").grid(column=1, row=0) ttk.Button(nav, text=">").grid(column=2, row=0) ttk.Button(nav, text=">>").grid(column=3, row=0) def refresh(): tagline.set(client.get_random_tagline()) images = client.get_images(page) for i in range(len(captions)): captions[i].set(images[i]["label"].replace(" // ", "\n")) for i in range(len(captions)): res = requests.get(images[i]["thumb_url"]) image = PIL.Image.open(BytesIO(res.content)) photo_img = PIL.ImageTk.PhotoImage(image) labels[i].configure(image=photo_img) labels[i].image = photo_img nav_layout() thread = Thread(target=refresh) thread.start() root.mainloop() thread.join()