FemGui/booru/__main__.py
2022-02-23 01:12:08 -08:00

76 lines
2.1 KiB
Python

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()