76 lines
2.1 KiB
Python
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()
|