-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathview.py
142 lines (112 loc) · 6.33 KB
/
view.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
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
class View:
def __init__(self, root, controller):
self.root = root
self.sshcontroller = controller
self.root.geometry("430x400")
self.root.resizable(False, False)
self.root.iconbitmap("printdcc.ico")
self.root.title("printDCC")
self.root.grid_columnconfigure(0, weight=1)
self.root.protocol("WM_DELETE_WINDOW", self.on_close)
# Crear la barra de menú
self.menu_bar = tk.Menu(self.root)
self.root.config(menu=self.menu_bar)
# Crear el menú "Ayuda"
self.help_menu = tk.Menu(self.menu_bar, tearoff=0)
self.menu_bar.add_cascade(label="Ayuda", menu=self.help_menu)
self.help_menu.add_command(label="Créditos", command=self.show_credits)
self.show_login_screen()
self.printer_frame = None
self.copies_frame = None
self.buttons_frame = None
def login(self):
username = self.username_entry.get()
password = self.password_entry.get()
status, message = self.sshcontroller.connect(username, password)
if status:
self.login_frame.grid_forget()
self.show_print_screen()
else:
messagebox.showerror("Login Failed", message)
def logout(self):
status, message = self.sshcontroller.disconnect()
if status:
self.printer_frame.grid_forget()
self.copies_frame.grid_forget()
self.buttons_frame.grid_forget()
self.show_login_screen()
else:
messagebox.showerror("Logout Failed", message)
def print(self, printer_name,file_name,copies_spinbox,double_sided):
status_upload, message_upload = self.sshcontroller.store_file(file_name)
if status_upload:
status_print, message_print = self.sshcontroller.print_file(printer_name,copies_spinbox,double_sided)
if status_print:
messagebox.showinfo("Impresión", message_print)
else:
messagebox.showerror("Print Failed", message_print)
else:
messagebox.showerror("Upload Failed", message_upload)
def show_login_screen(self):
self.login_frame = tk.LabelFrame(self.root, text="Conectarse a SSH Anakena", padx=10, pady=10)
self.login_frame.grid(row=0, column=0, padx=10, pady=10, sticky="ew")
tk.Label(self.login_frame, text="Usuario:").grid(row=0, column=0, padx=(0,10), pady=(10,10))
self.username_entry = tk.Entry(self.login_frame, width=40)
self.username_entry.grid(row=0, column=1, sticky="ew", padx=5, pady=(10,10))
tk.Label(self.login_frame, text="Contraseña:").grid(row=1, column=0, padx=(0,10), pady=(0,10))
self.password_entry = tk.Entry(self.login_frame, width=40, show="*")
self.password_entry.grid(row=1, column=1, sticky="ew", padx=5, pady=(0,10))
show_password_var = tk.BooleanVar()
show_password = tk.Checkbutton(self.login_frame, text="Ver Contraseña", variable=show_password_var, command=self.toggle_password)
show_password.grid(row=2, column=1, sticky="w", pady=(0,20))
login_button = tk.Button(self.login_frame, text="Iniciar Sesión", width=15, command=self.login)
login_button.grid(row=3, column=1, ipady=5)
def toggle_password(self):
# Hide and unhide password
if self.password_entry.cget("show") == "*":
self.password_entry.config(show="")
else:
self.password_entry.config(show="*")
def show_print_screen(self):
# Printer selection
self.printer_frame = tk.LabelFrame(self.root, text="Printer", padx=10, pady=10)
self.printer_frame.grid(row=0, column=0, padx=10, pady=10, sticky="ew")
tk.Label(self.printer_frame, text="Lugar:").grid(row=0, column=0, sticky="w", pady=(0,10))
printer_name = ttk.Combobox(self.printer_frame, values=["Toqui", "Salita"], width=35)
printer_name.grid(row=0, column=1, sticky="ew", padx=5, pady=(0,10))
printer_name.set("Toqui")
tk.Label(self.printer_frame, text="Archivo:").grid(row=1, column=0, sticky="w", pady=(0,10))
file_name = tk.Entry(self.printer_frame, width=40)
file_name.grid(row=1, column=1, sticky="ew", padx=5, pady=(0,10))
file_button = tk.Button(self.printer_frame, text="Seleccionar...", command=lambda: self.upload_file(file_name))
file_button.grid(row=1, column=2, padx=5, pady=(0,10))
# Copies
self.copies_frame = tk.LabelFrame(self.root, text="Copias", padx=10, pady=10)
self.copies_frame.grid(row=1, column=0, padx=10, pady=5, sticky="ew")
tk.Label(self.copies_frame, text="Número de copias:").grid(row=0, column=0, sticky="w", pady=(0,10))
copies_spinbox = tk.Spinbox(self.copies_frame, from_=1, to=99, width=5)
copies_spinbox.grid(row=0, column=1, sticky="w", padx=10, pady=(0,10))
double_sided_var = tk.BooleanVar()
double_sided = tk.Checkbutton(self.copies_frame, text="Doble cara", variable=double_sided_var)
double_sided.grid(row=1, column=0, sticky="w")
# Buttons
self.buttons_frame = tk.Frame(self.root, padx=10, pady=10)
self.buttons_frame.grid(row=2, column=0, padx=10, pady=5)
logout_button = tk.Button(self.buttons_frame, text="Cerrar Sesion", width=15, command=self.logout)
logout_button.grid(row=0, column=0, padx=(5,20), ipady=5)
print_button = tk.Button(self.buttons_frame, text="Imprimir", width=15, command=lambda: self.print(printer_name.get(),file_name.get(),copies_spinbox.get(),double_sided_var.get()))
print_button.grid(row=0, column=1, padx=(20,5), ipady=5)
def upload_file(self, file_name):
# Abrir cuadro de diálogo para seleccionar archivo
file_path = filedialog.askopenfilename(title="Seleccionar archivo", filetypes=[("Archivos PDF", "*.pdf")])
if file_path:
file_name.delete(0, tk.END) # Limpiar el Entry
file_name.insert(0, file_path) # Insertar la ruta del archivo seleccionado
def on_close(self):
#Cierra la conexión SSH y la ventana al salir
self.sshcontroller.disconnect()
self.root.destroy()
def show_credits(self):
messagebox.showinfo("Créditos", "Desarollado por @cstammp\nVersión: 1.0\nMIT License © 2024")