Skip to content
This repository has been archived by the owner on Mar 3, 2021. It is now read-only.

Commit

Permalink
gui ui enchance login page & rank & id done ++
Browse files Browse the repository at this point in the history
  • Loading branch information
Redcxx committed Aug 29, 2019
1 parent 7f4a4ee commit f509099
Show file tree
Hide file tree
Showing 11 changed files with 444 additions and 340 deletions.
49 changes: 47 additions & 2 deletions gui/common.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
import glob
import re
import sys
import tkinter
from multiprocessing import Process
from tkinter import END, NORMAL, DISABLED, Text, Entry, TclError

from download import DownloadWindow
import settings


def go_to_next_screen(src, dest):
pikax_handler = src.pikax_handler
master = src.frame.master
src.destroy()
dest(master, pikax_handler)
src.destroy() # destroy after creation to prevent black screen in the middle


def download(target, args=(), kwargs=()):
from download import DownloadWindow
Process(target=DownloadWindow, args=(target, args, kwargs)).start()


Expand Down Expand Up @@ -63,3 +67,44 @@ def write(self, string):

def flush(self):
pass


def crop_to_dimension(im, width_ratio, height_ratio, focus=tkinter.CENTER):
transformed_width = im.height / height_ratio * width_ratio
if transformed_width < im.width:
width = transformed_width
height = im.height
else:
height = im.width / width_ratio * height_ratio
width = im.width

mid = list(x / 2 for x in im.size)
half_width = width / 2
half_height = height / 2

if focus == tkinter.CENTER:
mid = mid
elif focus == tkinter.N:
mid[1] = half_height
elif focus == tkinter.S:
mid[1] = im.size[1] - half_height
elif focus == tkinter.W:
mid[0] = half_width
elif focus == tkinter.E:
mid[0] = im.size[0] - half_width
else:
raise ValueError(f'Invalid focus: {focus}')

left = mid[0] - half_width
upper = mid[1] - half_height
right = mid[0] + half_width
lower = mid[1] + half_height

return im.crop((left, upper, right, lower))


def get_background_file_path():
for file in glob.glob(settings.IMAGES_PATH):
if re.search(settings.CANVAS_BACKGROUND_PATH, file):
return file
return None
3 changes: 1 addition & 2 deletions gui/download.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from threading import Thread

import settings
from factory import make_text
from models import PikaxGuiComponent


Expand Down Expand Up @@ -51,7 +50,7 @@ def cancel_clicked(self):
self.destroy()

def make_download_output(self):
text_area = make_text(self.frame)
text_area = self.make_text()
text_area.configure(height=20)
return text_area

Expand Down
50 changes: 0 additions & 50 deletions gui/factory.py
Original file line number Diff line number Diff line change
@@ -1,52 +1,2 @@
from tkinter import *

# image = None
from tkinter import ttk


def make_button(master, text=''):
# global image
# image = PhotoImage(file='neurons.gif')
return Button(master=master,
text=text,
relief=FLAT,
padx=10,
pady=2,
width=17
)


def make_label(master, text=''):
return Label(master=master,
text=text)


def make_entry(master):
return Entry(master=master, borderwidth=0, highlightthickness=0, justify=CENTER)


def make_frame(master):
return Frame(master=master)


def make_dropdown(master, default, choices):
dropdown = ttk.Combobox(master, values=choices, state='readonly')
dropdown.configure(width=17)
dropdown.set(default)
return dropdown


def make_text(master):
return Text(master, wrap=WORD, height=1, width=80, state=DISABLED, highlightthickness=0, borderwidth=0)


def grid(component):
component.grid(padx=5, pady=5)


def pack(component):
component.pack(padx=5, pady=5)


def button_grid_configure(button):
button.grid_configure(padx=5, pady=5)
64 changes: 32 additions & 32 deletions gui/id.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,52 @@
import re
import sys
from threading import Thread
from tkinter import NORMAL, W, E

from models import PikaxGuiComponent
from common import go_to_next_screen
from models import PikaxGuiComponent


class IDDownloadThread(Thread):
def __init__(self, output_area, *args, **kwargs):
super().__init__(*args, **kwargs)
self.output_area = output_area

def run(self):
super().run()
if self.output_area:
self.output_area.see(0.0)


class IdScreen(PikaxGuiComponent):

def __init__(self, master, pikax_handler):
super().__init__(master, pikax_handler)
self.id_or_url_label = self.make_label('Illustration id or url')
self.id_or_url_entry = self.make_entry()
self.id_or_url_entry.configure(width=40)

self.grid_width = 20
self.grid_height = 9
self.id_or_url_text_id = self.add_text(text='Illustration id or url', row=2, column=9, columnspan=2)

self.id_or_url_entry = self.make_entry(width=40)
self.url_or_entry_id = self.add_widget(widget=self.id_or_url_entry, row=3, column=9, columnspan=2)

# buttons
self.download_button = self.make_button(text='download')
self.download_output = self.make_download_output()
self.back_button = self.make_button('back')
self.download_button_id = self.add_widget(widget=self.download_button, row=4, column=8)
self.back_button = self.make_button(text='back')
self.back_button_id = self.add_widget(widget=self.back_button, row=4, column=11)

self.components = [
self.id_or_url_label,
self.id_or_url_entry,
self.download_button,
self.download_output
]
self.download_output = self.make_download_output()
self.download_output_id = self.add_widget(widget=self.download_output, row=6, column=9, columnspan=2)
self.redirect_output_to(self.download_output)

self.download_button.configure(command=self.download_clicked)
self.back_button.configure(command=self.back_clicked)
self.redirect_output_to(self.download_output)

self.download_thread = None

self.load()
self.id_or_url_entry.focus_set()
self.frame.pack_configure(expand=True)
self.pack(self.frame)

def back_clicked(self):
from menu import MenuScreen
Expand All @@ -41,29 +56,14 @@ def download_clicked(self):
user_input = self.id_or_url_entry.get()
search_id = re.search(r'(?<!\d)\d{8}(?!\d)', user_input, re.S)
if search_id:
self.download_thread = Thread(target=self.pikax_handler.download_by_id, args=(search_id.group(0),))
self.download_thread = IDDownloadThread(output_area=self.download_output, target=self.pikax_handler.download_by_id,
args=(search_id.group(0),))
self.download_thread.start()
else:
if re.search(r'\d{8}', user_input, re.S):
sys.stdout.write('Ambiguous Id found, id should be 8 digits')
else:
sys.stdout.write('No id found in input')

def load(self):
for index, component in enumerate(self.components):
component.grid_configure(row=index, columnspan=2)

self.back_button.grid_configure(row=len(self.components) - 2, sticky=E, columnspan=1)
self.download_button.grid_configure(row=len(self.components) - 2, column=1, sticky=W, columnspan=1)

for component in self.components:
self.grid(component)

self.frame.pack_configure(expand=True)
self.pack(self.frame)

self.download_button.configure(state=NORMAL)
self.back_button.configure(state=NORMAL)

def destroy(self):
self.frame.destroy()
Loading

0 comments on commit f509099

Please sign in to comment.