138 lines
4.9 KiB
Python
138 lines
4.9 KiB
Python
import tkinter
|
|
from pathlib import Path
|
|
from tkinter import *
|
|
from tkinter import filedialog
|
|
import customtkinter
|
|
from src.entity.config import Config
|
|
from src.entity.generator import Generator
|
|
from src.util import Util
|
|
from src.window.about import AboutWindow
|
|
from src.window.image import ImageWindow
|
|
from src.window.session import SessionWindow
|
|
from CTkMenuBar import *
|
|
|
|
|
|
class App:
|
|
def __init__(self, root):
|
|
super().__init__()
|
|
self.list_in_session = None
|
|
self.custom = False
|
|
self.config = Config()
|
|
self.session = None
|
|
self.session_window = None
|
|
self.image_window = None
|
|
self.root = root
|
|
self.selected_folder = ""
|
|
self.found_images = []
|
|
self.timer = 0
|
|
|
|
menu = CTkMenuBar(master=root)
|
|
generate_button = menu.add_cascade("Generate")
|
|
help_button = menu.add_cascade("Help")
|
|
|
|
dropdown = CustomDropdownMenu(widget=generate_button)
|
|
dropdown.add_option(option="Poses", command=lambda:self.download_poses('poses'))
|
|
|
|
about = CustomDropdownMenu(widget=help_button)
|
|
about.add_option(option="À propos", command=self.show_help)
|
|
|
|
self.title = customtkinter.CTkLabel(root, text="Drawing Training")
|
|
self.title.pack()
|
|
|
|
self.folder_selector = customtkinter.CTkButton(root, text="Select a folder", command=self.select_folder)
|
|
self.folder_selector.pack()
|
|
|
|
self.folder_name = customtkinter.CTkLabel(root, text="Folder : " + self.selected_folder)
|
|
self.folder_name.pack()
|
|
|
|
self.images_len = customtkinter.CTkLabel(root, text="Found : " + str(len(self.found_images)))
|
|
self.images_len.pack()
|
|
|
|
self.button_frame = Frame(root, bg=root.cget("bg"))
|
|
self.button_frame.pack(fill=X, expand=True)
|
|
|
|
timers = [
|
|
Util.format_seconds(30),
|
|
Util.format_seconds(45),
|
|
Util.format_seconds(60),
|
|
Util.format_seconds(120),
|
|
Util.format_seconds(300),
|
|
Util.format_seconds(600),
|
|
"Custom"
|
|
]
|
|
|
|
self.buttons = []
|
|
for i, timer in enumerate(timers):
|
|
new_button = customtkinter.CTkButton(self.button_frame, width=10, text=timer,
|
|
command=lambda t=timer: self.set_timer_in_seconds(t))
|
|
new_button.pack(side=tkinter.LEFT, fill=X, expand=True)
|
|
self.buttons.append(new_button)
|
|
|
|
self.launch_button = customtkinter.CTkButton(root, text="Let's draw!", command=self.lets_draw, state="disabled")
|
|
self.launch_button.pack(side=tkinter.BOTTOM)
|
|
|
|
self.read_config()
|
|
|
|
def read_config(self):
|
|
try:
|
|
self.selected_folder = Config.get_required_config_var("default_folder")
|
|
self.folder_name.configure(text="Folder : " + self.selected_folder)
|
|
self.find_images_in_folder()
|
|
except Exception:
|
|
pass
|
|
|
|
def show_help(self):
|
|
AboutWindow(self)
|
|
|
|
def lets_draw(self):
|
|
self.image_window = ImageWindow(self)
|
|
self.image_window.lets_draw(self.found_images.copy(), self.timer)
|
|
|
|
def custom_session(self):
|
|
self.session_window = SessionWindow(self)
|
|
self.session_window.open()
|
|
|
|
def select_folder(self):
|
|
new_directory = filedialog.askdirectory()
|
|
if new_directory:
|
|
self.selected_folder = new_directory
|
|
self.folder_name.configure(text="Folder : " + self.selected_folder)
|
|
Config.set_config_var("default_folder", self.selected_folder).save()
|
|
self.find_images_in_folder()
|
|
self.check_lets_draw()
|
|
|
|
def download_poses(self, generator=None):
|
|
Generator(generator=generator, folder=self.selected_folder)
|
|
self.find_images_in_folder()
|
|
|
|
def find_images_in_folder(self):
|
|
if Path(self.selected_folder).exists():
|
|
self.found_images = list(
|
|
p.resolve() for p in Path(self.selected_folder).glob("**/*") if p.suffix in {".jpg", ".gif", ".png"}
|
|
)
|
|
self.images_len.configure(text="Found : " + str(len(self.found_images)))
|
|
|
|
def check_lets_draw(self):
|
|
if self.selected_folder != "" and len(self.found_images) > 0 and (self.timer != 0 or self.custom):
|
|
self.launch_button.configure(state="normal")
|
|
else:
|
|
self.launch_button.configure(state="disabled")
|
|
|
|
def set_timer_in_seconds(self, user_data):
|
|
# resetting buttons states
|
|
for button in self.buttons:
|
|
button.configure(fg_color=(Util.get_default_button_color() if user_data != button.cget(
|
|
"text") else Util.get_default_active_button_color()))
|
|
|
|
self.custom = False
|
|
if user_data == "Custom":
|
|
return self.custom_session()
|
|
|
|
self.timer = Util.format_time_to_seconds(user_data)
|
|
self.check_lets_draw()
|
|
|
|
def set_custom(self, list_in_session):
|
|
self.custom = True
|
|
self.list_in_session = list_in_session
|
|
self.check_lets_draw()
|