1
1
from threading import Thread as _Thread
2
+ from time import sleep as _sleep
2
3
from tkinter import Event as _Event
3
4
4
5
from customtkinter import CTk as _CTk , StringVar as _StringVar , CTkLabel as _CTkLabel , CTkEntry as _CTkEntry , \
@@ -55,23 +56,24 @@ def size(self) -> tuple[int, int]:
55
56
return abs (self ._x1 - self ._x0 ), abs (self ._y1 - self ._y0 )
56
57
57
58
58
- class EBookTerminator (object ):
59
+ class EbookTerminator (object ):
59
60
def __init__ (self , padx : int = 4 , pady : int = 2 ) -> None :
60
61
self ._px : int = padx
61
62
self ._py : int = pady
62
63
self ._root : _CTk = _CTk ()
63
- self ._root .title ("EBook Extractor" )
64
+ self ._root .title ("Ebook Extractor" )
64
65
self ._root .geometry ("580x80" )
65
66
self ._root .resizable (False , False )
66
67
self ._from_page : _StringVar = _StringVar (self ._root , "1" )
67
68
self ._to_page : _StringVar = _StringVar (self ._root , "2" )
68
69
self ._path : _StringVar = _StringVar (self ._root , "output.pdf" )
69
70
self ._format : _StringVar = _StringVar (self ._root , "PDF" )
71
+ self ._instruction : _StringVar = _StringVar (self ._root , "Press <shift>+<f4> to continue" )
70
72
self ._region : Region = Region ()
71
73
self ._extraction_thread = _Thread (target = self .extract , daemon = True )
72
74
73
75
def select_region (self ) -> None :
74
- self ._root . withdraw ( )
76
+ self ._instruction . set ( "Click to start selection" )
75
77
dialog = _CTkToplevel (self ._root )
76
78
dialog .overrideredirect (True )
77
79
dialog .attributes ("-top" , True )
@@ -118,13 +120,23 @@ def confirm(_) -> None:
118
120
dialog .bind ("<KeyPress-Return>" , confirm )
119
121
120
122
def extract (self , book : _Book ) -> None :
123
+ self ._instruction .set ("Click on your ebook application to yield focus (3)" )
124
+ _sleep (1 )
125
+ self ._instruction .set ("Click on your ebook application to yield focus (2)" )
126
+ _sleep (1 )
127
+ self ._instruction .set ("Click on your ebook application to yield focus (1)" )
128
+ _sleep (1 )
129
+ self ._instruction .set ("Exporting..." )
121
130
match self ._format .get ():
122
131
case "PDF" :
123
132
_save_as_pdf (book , self ._path .get ())
124
133
case "Text PDF" :
125
134
_save_as_pdf (book , self ._path .get (), True )
126
135
case "Images" :
127
136
_save_as_images (book , self ._path .get ())
137
+ book .close ()
138
+ self ._instruction .set (f"File saved at { self ._path .get ()} " )
139
+ _sleep (1 )
128
140
self ._root .destroy ()
129
141
130
142
def run (self ) -> None :
@@ -139,7 +151,7 @@ def run(self) -> None:
139
151
save_as_option = _CTkOptionMenu (self ._root , width = 96 , variable = self ._format ,
140
152
values = ["PDF" , "Text PDF" , "Images" ])
141
153
save_as_entry = _CTkEntry (self ._root , width = 96 , textvariable = self ._path , justify = "center" )
142
- instruction_label = _CTkLabel (self ._root , text = "Press <shift>+<f4> to Continue" )
154
+ instruction_label = _CTkLabel (self ._root , textvariable = self . _instruction )
143
155
from_page_label .grid (row = 0 , column = 0 , sticky = "NSEW" , ipadx = self ._px , ipady = self ._py , padx = self ._px ,
144
156
pady = self ._py )
145
157
from_page_entry .grid (row = 0 , column = 1 , sticky = "NSEW" , ipadx = self ._px , ipady = self ._py , padx = self ._px ,
@@ -160,4 +172,4 @@ def run(self) -> None:
160
172
161
173
162
174
def __entry__ () -> None :
163
- EBookTerminator ().run ()
175
+ EbookTerminator ().run ()
0 commit comments