-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpdf_gui.py
167 lines (145 loc) · 5.07 KB
/
pdf_gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import os
from tkinter import *
from tkinter import filedialog
from tkinter import messagebox
from Errors import EmptyFileError, TooFewPagesError
from mensagens import *
from split import split_infiles
class Pdf(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.frame = LabelFrame(text="Divisor de PDFs", padx=50, pady=50)
self.frame.pack()
self.funcao_divisao = "tamanho"
r = StringVar()
self.radio_tam = Radiobutton(
self.frame,
text="Dividir por tamanho",
variable=r,
value="tamanho",
command=lambda: self.define_funcao(r.get())
)
self.radio_partes = Radiobutton(
self.frame,
text="Dividir por partes",
variable=r,
value="partes",
command=lambda: self.define_funcao(r.get())
)
self.botao_pasta = Button(
self.frame,
text="Escolha uma pasta",
command=self.escolhe_pasta
)
self.botao_arquivo = Button(
self.frame,
text="Escolha um arquivo",
command=self.escolhe_arquivo
)
self.entrada_input = Entry(self.frame)
self.entrada_texto = Label(self.frame, text="Tamanho máximo (MB)")
self.botao_dividir = Button(
self.frame,
text="Dividir",
command=self.divide_pdf
)
self.status = Label(
self.frame,
text="Escolha um arquivo ou pasta.",
bd=1,
relief=SUNKEN
)
self.botao_info = Button(
self.frame,
text="Informações",
command=self.info_popup
)
self.radio_tam.select()
self.radio_tam.grid(row=0, column=0, pady=10)
self.radio_partes.grid(row=0, column=1, pady=10)
self.botao_pasta.grid(row=1, column=0, pady=10)
self.botao_arquivo.grid(row=1, column=1, pady=10)
self.entrada_input.grid(row=2, column=0, pady=10)
self.entrada_texto.grid(row=2, column=1, pady=10)
self.botao_dividir.grid(row=3, column=0, columnspan=2, pady=10)
self.status.grid(row=4, column=0, columnspan=2, pady=10, sticky=W+E)
self.botao_info.grid(row=5, column=0, columnspan=2, pady=10)
def divide_pdf(self):
try:
sop = self.get_tam_ou_partes()
except ValueError:
self.popup("Erro", "Por favor insira um número inteiro maior que zero.")
return
self.set_status("Carregando...")
try:
split_infiles(sop, self.caminho, self.funcao_divisao)
except AttributeError:
self.popup("Erro", ARQ_OU_PASTA)
self.set_status(ARQ_OU_PASTA)
return
except FileExistsError:
self.popup("Erro", PASTA_JA_EXISTE)
self.set_status(ARQ_OU_PASTA)
return
except EmptyFileError:
self.popup("Erro", EMPTY_FILE)
self.set_status(ARQ_OU_PASTA)
return
except TooFewPagesError:
self.popup("Erro", TOO_FEW_PAGES)
self.set_status(ARQ_OU_PASTA)
return
else:
self.set_status("Sucesso")
def define_funcao(self, funcao):
self.entrada_texto.destroy()
if funcao == "tamanho":
self.funcao_divisao = "tamanho"
self.entrada_texto = Label(self.frame, text="Tamanho máximo (MB)")
elif funcao == "partes":
self.funcao_divisao = "partes"
self.entrada_texto = Label(self.frame, text="Número de partes")
self.entrada_texto.grid(row=2, column=1, pady=10)
def escolhe_pasta(self):
self.caminho = filedialog.askdirectory(
initialdir=os.getcwd(),
title="Escolha uma pasta"
)
self.set_status(self.caminho)
def escolhe_arquivo(self):
self.caminho = filedialog.askopenfilename(
initialdir=os.getcwd(),
title="Escolha um arquivo",
filetypes=(("pdf files", "*.pdf"), ("all files", "*.*"))
)
self.set_status(self.caminho)
def get_tam_ou_partes(self):
try:
sop = self.set_tam_ou_partes()
except ValueError:
raise ValueError
else:
return sop
def set_tam_ou_partes(self):
sop = int(self.entrada_input.get())
if sop <= 0:
raise ValueError
return sop
def set_status(self, texto):
self.status.destroy()
self.status = Label(self.frame, text=texto, bd=1, relief=SUNKEN)
self.status.grid(row=4, column=0, columnspan=2, pady=10, sticky=W+E)
def popup(self, title, texto):
messagebox.showerror(title, texto)
def info_popup(self):
top = Toplevel()
top.title("Informações splitPDF")
top_label = Label(top, text=TEXTO_INFO).pack()
botao_fechar = Button(top, text="Fechar", command=top.destroy).pack()
def main():
root = Tk()
root.title("splitPDF")
Pdf(root)
root.mainloop()
if __name__ == "__main__":
main()