Files
DrawingTraining/src/element/image.py
2024-06-17 14:16:58 +02:00

78 lines
2.6 KiB
Python

import copy
from tkinter import *
import PIL
from PIL import ImageTk, Image, ImageOps
class ImagePlaceholder:
def __init__(self, image_window, images):
self.is_break = False
self.current_image = None
self.current_original_image = None
self.paused_original_image = None
self.image_window = image_window
self.images = images.copy()
self.image_label = Label(self.image_window.window)
self.image_label.bind('<Configure>', lambda event: self.apply_options())
self.image_label.pack(side=TOP, fill=BOTH, expand=1)
def display_new_image(self):
if len(self.images) == 0:
self.image_window.on_closing()
return
image_path = self.images.pop(0)
if image_path == "break":
self.is_break = True
image_path = 'assets/images/break.jpg'
self.image_window.play_elevator()
else:
self.is_break = False
self.image_window.elevator_sound.stop()
self.current_original_image = Image.open(image_path)
self.current_image = copy.deepcopy(self.current_original_image)
self.apply_options()
def resize_image(self, reload=False):
ma = self.image_window.window.winfo_toplevel()
w, h = ma.winfo_width(), ma.winfo_height()
if w < 21 or h < 21:
w = 1280
h = 1024
self.current_image.thumbnail((w - 20, h - 20), PIL.Image.Resampling.LANCZOS)
if reload:
self.load_widget()
def apply_options(self):
self.current_image = copy.deepcopy(self.current_original_image)
if self.image_window.option["bw"]:
self.current_image = self.current_image.convert("L")
if self.image_window.option["mirror"]:
self.current_image = ImageOps.mirror(self.current_image)
self.resize_image(True)
def load_widget(self):
image_to_display = ImageTk.PhotoImage(self.current_image)
self.image_label.configure(bg="#e8d4bc" if self.is_break else "#FFFFFF")
self.image_label.configure(image=image_to_display)
self.image_label.image = image_to_display
def pause(self, pause=True, cheat=False):
if pause:
self.paused_original_image = self.current_original_image
if not cheat:
image_path = 'assets/images/break.jpg'
self.current_original_image = Image.open(image_path)
else:
self.current_original_image = self.paused_original_image
self.paused_original_image = None
self.current_image = copy.deepcopy(self.current_original_image)
self.apply_options()