Created
July 26, 2021 22:22
-
-
Save HeIIow2/089cd8d702fcbb2408742cddf54df3d6 to your computer and use it in GitHub Desktop.
uhm the source code so u can trust me
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tkinter | |
from PIL import Image, ImageSequence | |
from PIL.ImageTk import PhotoImage | |
class Gif: | |
def __init__(self, master, rowspan=1, size=(200, 200), bg='#666', padx=5, pady=5): | |
gif_path = 'anime_girl_asking.gif' | |
# self.frames = [PhotoImage(file=gif_path, format='gif -index %i' % i) for i in range(self.frameCnt)] | |
frames_pil = self.unpack_gif(gif_path) | |
for i in range(len(frames_pil)): | |
frames_pil[i].thumbnail(size) | |
self.frames = [PhotoImage(frames_pil[i]) for i in range(len(frames_pil))] | |
self.index = 0 | |
self.gif_label = tkinter.Label(master, image=self.frames[self.index], bg=bg) | |
self.gif_label.grid(row=0, column=0, rowspan=rowspan, padx=padx, pady=pady) | |
@staticmethod | |
def unpack_gif(src): | |
# Load Gif | |
image = Image.open(src) | |
# Get frames and disposal method for each frame | |
frames = [] | |
disposal = [] | |
for gifFrame in ImageSequence.Iterator(image): | |
disposal.append(gifFrame.disposal_method) | |
frames.append(gifFrame.convert('P')) | |
# Loop through frames, and edit them based on their disposal method | |
output = [] | |
lastFrame = None | |
thisFrame = None | |
for i, loadedFrame in enumerate(frames): | |
# Update thisFrame | |
thisFrame = loadedFrame | |
# If the disposal method is 2 | |
if disposal[i] == 2: | |
# Check that this is not the first frame | |
if i != 0: | |
# Pastes thisFrames opaque pixels over lastFrame and appends lastFrame to output | |
lastFrame.paste(thisFrame, mask=thisFrame.convert('RGBA')) | |
output.append(lastFrame) | |
else: | |
output.append(thisFrame) | |
# If the disposal method is 1 or 0 | |
elif disposal[i] == 1 or disposal[i] == 0: | |
# Appends thisFrame to output | |
output.append(thisFrame) | |
# If disposal method if anything other than 2, 1, or 0 | |
else: | |
raise ValueError( | |
'Disposal Methods other than 2:Restore to Background, 1:Do Not Dispose, and 0:No Disposal are supported at this time') | |
# Update lastFrame | |
lastFrame = loadedFrame | |
return output | |
def update(self): | |
self.index += 1 | |
self.index = self.index % len(self.frames) | |
self.gif_label.configure(image=self.frames[self.index]) | |
class Label: | |
def __init__(self, master, text, row=0, column=1, bg='#666', font='#eee', padx=5, pady=5): | |
label = tkinter.Label(master, text=text, bg=bg, fg=font, padx=padx, pady=pady) | |
label.grid(row=row, column=column) | |
class Entry: | |
def __init__(self, master, row=0, column=1, padx=8, pady=3): | |
self.entry = tkinter.Entry(master) | |
self.entry.grid(row=row, column=column, padx=padx, pady=pady) | |
def clear_entry(self): | |
self.entry.delete(0, 'end') | |
class Entries: | |
def __init__(self, master, row=0, column=1, bg='#666', font='#eee'): | |
frame = tkinter.Frame(master, bg=bg) | |
frame.grid(row=row, column=column) | |
card_number_label = Label(frame, 'Card number: ', row=0, column=0) | |
self.card_number_entry = Entry(frame, row=0, column=1) | |
expiry_date_label = Label(frame, 'Expiry date: ', row=1, column=0) | |
self.expiry_date_entry = Entry(frame, row=1, column=1) | |
security_code_label = Label(frame, 'Security code: ', row=2, column=0) | |
self.security_code_entry = Entry(frame, row=2, column=1) | |
def clear_entries(self): | |
self.card_number_entry.clear_entry() | |
self.expiry_date_entry.clear_entry() | |
self.security_code_entry.clear_entry() | |
class Input: | |
def __init__(self, master, bg='#666', font='#eee', button_color='#777', on_press_color='#888'): | |
master.rowconfigure(2, weight=1) | |
self.question = Label(master, 'H-hi there...\n' | |
'Do you th-think I could have your\n' | |
'credit card information, p-please?', | |
row=0, column=0, pady=7) | |
self.entries = Entries(master, row=1, column=0) | |
self.button = tkinter.Button(master, text='Th-thanks', command=self.submit, bg=button_color, fg=font, bd=0, activebackground=on_press_color, activeforeground=font) | |
self.button.grid(row=2, column=0, padx=5, pady=5, sticky='nsew') | |
def submit(self): | |
self.entries.clear_entries() | |
class Asking: | |
def __init__(self, master, bg='#444', fg='#666', font='#eee'): | |
master.configure(bg=bg) | |
master.title('pweaaaaase Senpai') | |
master.resizable(width=False, height=False) | |
self.frame = tkinter.Frame(master, bg=bg) | |
self.frame.grid(row=0, column=0) | |
self.gif = Gif(self.frame, rowspan=3, bg=bg) | |
self.input_frame = tkinter.Frame(master, bg=fg) | |
self.input_frame.grid(row=0, column=1, padx=10, sticky='ns', pady=7) | |
self.input = Input(self.input_frame, bg=fg, font=font) | |
def update(self): | |
self.gif.update() | |
root.after(100, self.update) | |
root = tkinter.Tk() | |
asking = Asking(root) | |
root.after(0, asking.update) | |
root.mainloop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment