Interfaz » History » Version 11
cristobal hernandez, 12/12/2024 10:07 PM
1 | 1 | ana gutierrez | h1. Interfaz |
---|---|---|---|
2 | 4 | cristobal hernandez | |
3 | 5 | cristobal hernandez | <pre><code class="python"> |
4 | 10 | cristobal hernandez | import pygame |
5 | 10 | cristobal hernandez | import tkinter as tk |
6 | 10 | cristobal hernandez | from tkinter import ttk |
7 | 10 | cristobal hernandez | from tkinter import messagebox |
8 | 10 | cristobal hernandez | import socket |
9 | 10 | cristobal hernandez | |
10 | 10 | cristobal hernandez | class Aplicacion: |
11 | 10 | cristobal hernandez | def __init__(self, root): |
12 | 10 | cristobal hernandez | self.key_pressed = False |
13 | 10 | cristobal hernandez | self.tecla_pressed = None |
14 | 10 | cristobal hernandez | self.botones_presionados = set() |
15 | 10 | cristobal hernandez | |
16 | 10 | cristobal hernandez | self.lista_botones = [] |
17 | 10 | cristobal hernandez | self.contenedor = {} |
18 | 10 | cristobal hernandez | self.labels = {} |
19 | 10 | cristobal hernandez | |
20 | 10 | cristobal hernandez | self.imagenes_botones = { |
21 | 10 | cristobal hernandez | "up": tk.PhotoImage(file="resources2/up.png"), |
22 | 10 | cristobal hernandez | "left": tk.PhotoImage(file="resources2/left.png"), |
23 | 10 | cristobal hernandez | "down": tk.PhotoImage(file="resources2/down.png"), |
24 | 10 | cristobal hernandez | "right": tk.PhotoImage(file="resources2/right.png"), |
25 | 10 | cristobal hernandez | "up_claw": tk.PhotoImage(file="resources2/up_claw.png"), |
26 | 10 | cristobal hernandez | "down_claw": tk.PhotoImage(file="resources2/down_claw.png"), |
27 | 10 | cristobal hernandez | "center1": tk.PhotoImage(file="resources2/center1.png"), |
28 | 10 | cristobal hernandez | "center2": tk.PhotoImage(file="resources2/center2.png"), |
29 | 10 | cristobal hernandez | "off": tk.PhotoImage(file="resources2/off1.png") |
30 | 10 | cristobal hernandez | } |
31 | 10 | cristobal hernandez | |
32 | 10 | cristobal hernandez | self.botones_config = [ |
33 | 10 | cristobal hernandez | (self.imagenes_botones["up"], 275, 250, self.moveUp), |
34 | 10 | cristobal hernandez | (self.imagenes_botones["left"], 225, 300, self.moveLeft), |
35 | 10 | cristobal hernandez | (self.imagenes_botones["down"], 275, 300, self.moveDown), |
36 | 10 | cristobal hernandez | (self.imagenes_botones["right"], 325, 300, self.moveRight), |
37 | 10 | cristobal hernandez | (self.imagenes_botones["up_claw"], 475, 250, self.upCraw), |
38 | 10 | cristobal hernandez | (self.imagenes_botones["down_claw"], 475, 300, self.downCraw), |
39 | 10 | cristobal hernandez | (self.imagenes_botones["center1"], 555, 275, self.grab), |
40 | 10 | cristobal hernandez | (self.imagenes_botones["center2"], 625, 275, self.drop) |
41 | 10 | cristobal hernandez | ] |
42 | 10 | cristobal hernandez | |
43 | 10 | cristobal hernandez | self.teclas_teclado = { |
44 | 10 | cristobal hernandez | "w": {"coords": (250, 225, 300, 275), "label_pos": (275, 250), "etiqueta": "W", "funcion": self.moveUp}, # Arriba |
45 | 10 | cristobal hernandez | "a": {"coords": (200, 275, 250, 325), "label_pos": (225, 300), "etiqueta": "A", "funcion": self.moveLeft}, # Izquierda |
46 | 10 | cristobal hernandez | "s": {"coords": (250, 275, 300, 325), "label_pos": (275, 300), "etiqueta": "S", "funcion": self.moveDown}, # Abajo |
47 | 10 | cristobal hernandez | "d": {"coords": (300, 275, 350, 325), "label_pos": (325, 300), "etiqueta": "D", "funcion": self.moveRight}, # Derecha |
48 | 10 | cristobal hernandez | "l": {"coords": (450, 225, 500, 275), "label_pos": (475, 250), "etiqueta": "L", "funcion": self.upCraw}, # Arriba Garra |
49 | 10 | cristobal hernandez | "k": {"coords": (450, 275, 500, 325), "label_pos": (475, 300), "etiqueta": "K", "funcion": self.downCraw}, # Abajo Garra |
50 | 10 | cristobal hernandez | "x": {"coords": (530, 250, 580, 300), "label_pos": (555, 275), "etiqueta": "X", "funcion": self.grab}, # Agarrar |
51 | 10 | cristobal hernandez | "c": {"coords": (600, 250, 650, 300), "label_pos": (625, 275), "etiqueta": "C", "funcion": self.drop} # Soltar |
52 | 10 | cristobal hernandez | } |
53 | 10 | cristobal hernandez | |
54 | 10 | cristobal hernandez | self.teclas_joystick = { |
55 | 10 | cristobal hernandez | (0, 1): {"coords": (175, 200, 225, 250), "label_pos": (200, 225), "etiqueta": "w"}, # Arriba |
56 | 10 | cristobal hernandez | (0, -1): {"coords": (175, 300, 225, 350), "label_pos": (200, 325), "etiqueta": "s"}, # Abajo |
57 | 10 | cristobal hernandez | (-1, 0): {"coords": (125, 250, 175, 300), "label_pos": (150, 275), "etiqueta": "a"}, # Izquierda |
58 | 10 | cristobal hernandez | (1, 0): {"coords": (225, 250, 275, 300), "label_pos": (250, 275), "etiqueta": "d"}, # Derecha |
59 | 10 | cristobal hernandez | 8: {"coords": (450, 200, 500, 250), "label_pos": (475, 225), "etiqueta": "L2"}, # Arriba Garra |
60 | 10 | cristobal hernandez | 9: {"coords": (450, 250, 500, 300), "label_pos": (475, 275), "etiqueta": "R2"}, # Abajo Garra |
61 | 10 | cristobal hernandez | 0: {"coords": (530, 225, 580, 275), "label_pos": (555, 250), "etiqueta": "A"}, # Agarrar |
62 | 10 | cristobal hernandez | 1: {"coords": (600, 225, 650, 275), "label_pos": (625, 250), "etiqueta": "B"}, # Soltar |
63 | 10 | cristobal hernandez | "C": {"coords": (300, 225, 400, 325), "label_pos": (625, 250), "etiqueta": ""}, # Círculo Grande |
64 | 10 | cristobal hernandez | "c": {"coords": (340, 265, 360, 285), "label_pos": (625, 250), "etiqueta": ""}, # Círculo Chico |
65 | 10 | cristobal hernandez | } |
66 | 10 | cristobal hernandez | |
67 | 10 | cristobal hernandez | self.root = root |
68 | 10 | cristobal hernandez | self.root.title("Blitz") |
69 | 10 | cristobal hernandez | self.root.geometry("800x450") |
70 | 10 | cristobal hernandez | self.root.resizable(0, 0) |
71 | 10 | cristobal hernandez | self.root.iconbitmap("resources2/logoBlitz.png") |
72 | 10 | cristobal hernandez | |
73 | 10 | cristobal hernandez | self._configurar_estilos() |
74 | 10 | cristobal hernandez | |
75 | 10 | cristobal hernandez | self.imagen_fondo = tk.PhotoImage(file="resources2/fondoBlitz.png") |
76 | 10 | cristobal hernandez | self.canvas = tk.Canvas(self.root, width=800, height=400) |
77 | 10 | cristobal hernandez | self.canvas.pack(fill="both", expand=True) |
78 | 10 | cristobal hernandez | self.canvas.create_image(0, 0, image=self.imagen_fondo, anchor="nw") |
79 | 10 | cristobal hernandez | |
80 | 10 | cristobal hernandez | self.crear_labels() |
81 | 10 | cristobal hernandez | self.combobox_controles = ttk.Combobox(self.root, values=["Botones", "Teclado", "Joystick"], |
82 | 10 | cristobal hernandez | state="disabled", font=("Comic Sans MS", 10), width=7, |
83 | 10 | cristobal hernandez | style="TCombobox") |
84 | 10 | cristobal hernandez | self.combobox_controles.bind("<<ComboboxSelected>>", self.on_select) |
85 | 10 | cristobal hernandez | self.canvas.create_window(180, 135, window=self.combobox_controles) |
86 | 10 | cristobal hernandez | self.combobox_controles.current(0) |
87 | 10 | cristobal hernandez | |
88 | 10 | cristobal hernandez | # Crear botón "off" |
89 | 10 | cristobal hernandez | self.x0, self.y0, self.x1, self.y1 = 375, 327, 425, 377 |
90 | 10 | cristobal hernandez | self.circle = self.canvas.create_oval(self.x0, self.y0, self.x1, self.y1, fill="blue", outline="black") |
91 | 10 | cristobal hernandez | |
92 | 10 | cristobal hernandez | self.imagen_conexion = tk.PhotoImage(file="resources2/off1.png") |
93 | 10 | cristobal hernandez | self.imagen_desconexion = tk.PhotoImage(file="resources2/off2.png") |
94 | 10 | cristobal hernandez | self.current_image = self.imagen_desconexion |
95 | 10 | cristobal hernandez | |
96 | 10 | cristobal hernandez | self.canvas_image = self.canvas.create_image((self.x0 + self.x1) / 2, (self.y0 + self.y1) / 2, image=self.current_image) |
97 | 10 | cristobal hernandez | self.canvas.image = self.current_image |
98 | 10 | cristobal hernandez | |
99 | 10 | cristobal hernandez | self.current_funcion = self.ventana_conexion_servidor |
100 | 10 | cristobal hernandez | |
101 | 10 | cristobal hernandez | self.canvas.bind("<Button-1>", self.check_click) |
102 | 10 | cristobal hernandez | |
103 | 10 | cristobal hernandez | |
104 | 10 | cristobal hernandez | def check_click(self, event): |
105 | 10 | cristobal hernandez | x, y = event.x, event.y |
106 | 10 | cristobal hernandez | if self.x0 <= x <= self.x1 and self.y0 <= y <= self.y1: |
107 | 10 | cristobal hernandez | self.current_funcion() |
108 | 10 | cristobal hernandez | |
109 | 10 | cristobal hernandez | def crear_labels(self): |
110 | 10 | cristobal hernandez | self.label1 = tk.Label(self.root, text="Robot", font=("Comic Sans MS", 16, "bold")) |
111 | 10 | cristobal hernandez | self.canvas.create_window(275, 170, window=self.label1) |
112 | 10 | cristobal hernandez | self.label2 = tk.Label(self.root, text="Garra", font=("Comic Sans MS", 16, "bold")) |
113 | 10 | cristobal hernandez | self.canvas.create_window(555, 170, window=self.label2) |
114 | 10 | cristobal hernandez | self.label_agarrar = tk.Label(self.root, text="Agarrar", font=("Comic Sans MS", 9, "bold")) |
115 | 10 | cristobal hernandez | self.canvas.create_window(555, 325, window=self.label_agarrar) |
116 | 10 | cristobal hernandez | self.label_soltar = tk.Label(self.root, text="Soltar", font=("Comic Sans MS", 9, "bold")) |
117 | 10 | cristobal hernandez | self.canvas.create_window(625, 325, window=self.label_soltar) |
118 | 10 | cristobal hernandez | |
119 | 10 | cristobal hernandez | def borrar_labels(self): |
120 | 10 | cristobal hernandez | self.label1.destroy() |
121 | 10 | cristobal hernandez | self.label2.destroy() |
122 | 10 | cristobal hernandez | self.label_agarrar.destroy() |
123 | 10 | cristobal hernandez | self.label_soltar.destroy() |
124 | 10 | cristobal hernandez | |
125 | 10 | cristobal hernandez | def _configurar_estilos(self): |
126 | 10 | cristobal hernandez | estilos = { |
127 | 10 | cristobal hernandez | '*TCombobox*Listbox.font': ("Comic Sans MS", 10), |
128 | 10 | cristobal hernandez | '*TCombobox*Listbox.background': "#0F2B6A", |
129 | 10 | cristobal hernandez | '*TCombobox*Listbox.foreground': "#ffffff", |
130 | 10 | cristobal hernandez | '*TCombobox*Listbox.selectBackground': '#08FBF9' |
131 | 10 | cristobal hernandez | } |
132 | 10 | cristobal hernandez | for k, v in estilos.items(): |
133 | 10 | cristobal hernandez | self.root.option_add(k, v) |
134 | 10 | cristobal hernandez | |
135 | 10 | cristobal hernandez | # Botones |
136 | 10 | cristobal hernandez | def crear_botones(self): |
137 | 10 | cristobal hernandez | for imagen, x, y, funcion in self.botones_config[:4]: |
138 | 10 | cristobal hernandez | boton = tk.Button(self.root, image=imagen, borderwidth=0, highlightthickness=0, cursor="hand2", bg="#0F2B6A") |
139 | 10 | cristobal hernandez | boton.bind("<ButtonPress>", lambda event, f=funcion: f()) |
140 | 10 | cristobal hernandez | boton.bind("<ButtonRelease>", lambda event: self.stop()) |
141 | 10 | cristobal hernandez | self.canvas.create_window(x, y, window=boton) |
142 | 10 | cristobal hernandez | self.lista_botones.append(boton) |
143 | 10 | cristobal hernandez | for imagen, x, y, funcion in self.botones_config[4:]: |
144 | 10 | cristobal hernandez | boton = tk.Button(self.root, image=imagen, borderwidth=0, highlightthickness=0, cursor="hand2", bg="#0F2B6A") |
145 | 10 | cristobal hernandez | boton.bind("<ButtonPress>", lambda event, f=funcion: f()) |
146 | 10 | cristobal hernandez | self.canvas.create_window(x, y, window=boton) |
147 | 10 | cristobal hernandez | self.lista_botones.append(boton) |
148 | 10 | cristobal hernandez | |
149 | 10 | cristobal hernandez | def eliminar_botones(self): |
150 | 10 | cristobal hernandez | for boton in self.lista_botones: |
151 | 10 | cristobal hernandez | boton.destroy() |
152 | 10 | cristobal hernandez | self.lista_botones.clear() |
153 | 10 | cristobal hernandez | |
154 | 10 | cristobal hernandez | # Crear y eliminar Teclas |
155 | 10 | cristobal hernandez | def crear_teclas_teclado(self): |
156 | 10 | cristobal hernandez | for tecla, datos in self.teclas_teclado.items(): |
157 | 10 | cristobal hernandez | coords, label_pos, etiqueta = datos["coords"], datos["label_pos"], datos["etiqueta"] |
158 | 10 | cristobal hernandez | |
159 | 10 | cristobal hernandez | self.contenedor[tecla] = self.canvas.create_rectangle(*coords, fill="#0F2B6A", outline="black") |
160 | 10 | cristobal hernandez | label = self.canvas.create_text(*label_pos, text=etiqueta, font=("Comic Sans MS", 20), fill="white") |
161 | 10 | cristobal hernandez | self.labels[tecla] = label |
162 | 10 | cristobal hernandez | |
163 | 10 | cristobal hernandez | def crear_teclas_joystick(self): |
164 | 10 | cristobal hernandez | for tecla, datos in self.teclas_joystick.items(): |
165 | 10 | cristobal hernandez | coords, label_pos, etiqueta = datos["coords"], datos["label_pos"], datos["etiqueta"] |
166 | 10 | cristobal hernandez | |
167 | 10 | cristobal hernandez | self.contenedor[tecla] = self.canvas.create_oval(*coords, fill="#0F2B6A", outline="black") |
168 | 10 | cristobal hernandez | label = self.canvas.create_text(*label_pos, text=etiqueta, font=("Comic Sans MS", 20), fill="white") |
169 | 10 | cristobal hernandez | self.labels[tecla] = label |
170 | 10 | cristobal hernandez | |
171 | 10 | cristobal hernandez | self.canvas.itemconfig(self.contenedor["C"], fill="") |
172 | 10 | cristobal hernandez | self.canvas.itemconfig(self.contenedor["c"], fill="white") |
173 | 10 | cristobal hernandez | |
174 | 10 | cristobal hernandez | |
175 | 10 | cristobal hernandez | def eliminar_teclas_y_botones(self): |
176 | 10 | cristobal hernandez | if self.contenedor: |
177 | 10 | cristobal hernandez | for tecla in self.contenedor: |
178 | 10 | cristobal hernandez | self.canvas.delete(self.contenedor[tecla]) |
179 | 10 | cristobal hernandez | self.contenedor.clear() |
180 | 10 | cristobal hernandez | for tecla in self.labels: |
181 | 10 | cristobal hernandez | self.canvas.delete(self.labels[tecla]) |
182 | 10 | cristobal hernandez | for boton in self.lista_botones: |
183 | 10 | cristobal hernandez | boton.destroy() |
184 | 10 | cristobal hernandez | self.labels.clear() |
185 | 10 | cristobal hernandez | self.lista_botones.clear() |
186 | 10 | cristobal hernandez | |
187 | 10 | cristobal hernandez | #Teclado |
188 | 10 | cristobal hernandez | def activar_teclas_teclado(self): |
189 | 10 | cristobal hernandez | for tecla in self.teclas_teclado: |
190 | 10 | cristobal hernandez | self.root.bind(f"<KeyPress-{tecla}>", self.crear_callback(tecla, self.pressed)) |
191 | 10 | cristobal hernandez | self.root.bind(f"<KeyRelease-{tecla}>", self.crear_callback(tecla, self.released)) |
192 | 10 | cristobal hernandez | self.root.bind(f"<KeyPress-{tecla.upper()}>", self.crear_callback(tecla, self.pressed)) |
193 | 10 | cristobal hernandez | self.root.bind(f"<KeyRelease-{tecla.upper()}>", self.crear_callback(tecla, self.released)) |
194 | 10 | cristobal hernandez | |
195 | 10 | cristobal hernandez | def desactivar_teclas_teclado(self): |
196 | 10 | cristobal hernandez | for tecla in self.teclas_teclado: |
197 | 10 | cristobal hernandez | self.root.unbind(f"<KeyPress-{tecla}>") |
198 | 10 | cristobal hernandez | self.root.unbind(f"<KeyRelease-{tecla}>") |
199 | 10 | cristobal hernandez | self.root.unbind(f"<KeyPress-{tecla.upper()}>") |
200 | 10 | cristobal hernandez | self.root.unbind(f"<KeyRelease-{tecla.upper()}>") |
201 | 10 | cristobal hernandez | |
202 | 10 | cristobal hernandez | def crear_callback(self, tecla, funcion): |
203 | 10 | cristobal hernandez | return lambda event: funcion(tecla) |
204 | 10 | cristobal hernandez | |
205 | 10 | cristobal hernandez | def pressed(self, tecla): |
206 | 10 | cristobal hernandez | if not self.key_pressed and self.tecla_pressed is None: |
207 | 10 | cristobal hernandez | self.canvas.itemconfig(self.contenedor[tecla], fill="#08FBF9") |
208 | 10 | cristobal hernandez | self.tecla_pressed = tecla |
209 | 10 | cristobal hernandez | self.key_pressed = True |
210 | 10 | cristobal hernandez | self.teclas_teclado[tecla]["funcion"]() |
211 | 10 | cristobal hernandez | |
212 | 10 | cristobal hernandez | |
213 | 10 | cristobal hernandez | def released(self, tecla): |
214 | 10 | cristobal hernandez | teclas_sin_stop = ["L", "K", "X", "C"] |
215 | 10 | cristobal hernandez | |
216 | 10 | cristobal hernandez | if tecla.upper() not in teclas_sin_stop: |
217 | 10 | cristobal hernandez | self.stop() |
218 | 10 | cristobal hernandez | |
219 | 10 | cristobal hernandez | if tecla == self.tecla_pressed: |
220 | 10 | cristobal hernandez | self.canvas.itemconfig(self.contenedor[tecla], fill="#0F2B6A") |
221 | 10 | cristobal hernandez | self.tecla_pressed = None |
222 | 10 | cristobal hernandez | self.key_pressed = False |
223 | 10 | cristobal hernandez | |
224 | 11 | cristobal hernandez | def on_select(self, event): |
225 | 11 | cristobal hernandez | seleccion = self.combobox_controles.get() |
226 | 11 | cristobal hernandez | self.eliminar_teclas_y_botones() |
227 | 11 | cristobal hernandez | if seleccion == "Botones": |
228 | 11 | cristobal hernandez | self.crear_botones() |
229 | 11 | cristobal hernandez | elif seleccion == "Teclado": |
230 | 11 | cristobal hernandez | self.crear_teclas_teclado() |
231 | 11 | cristobal hernandez | self.activar_teclas_teclado() |
232 | 11 | cristobal hernandez | else: |
233 | 11 | cristobal hernandez | self.crear_teclas_joystick() |
234 | 11 | cristobal hernandez | self.inicializar_pygame() |
235 | 11 | cristobal hernandez | self.root.focus() |
236 | 11 | cristobal hernandez | self.tecla_pressed = None |
237 | 11 | cristobal hernandez | self.key_pressed = False |
238 | 11 | cristobal hernandez | |
239 | 11 | cristobal hernandez | # Servidor |
240 | 11 | cristobal hernandez | def validar_ip(self, ip): |
241 | 11 | cristobal hernandez | try: |
242 | 11 | cristobal hernandez | socket.inet_aton(ip) |
243 | 11 | cristobal hernandez | return True |
244 | 11 | cristobal hernandez | except socket.error: |
245 | 11 | cristobal hernandez | return False |
246 | 11 | cristobal hernandez | |
247 | 11 | cristobal hernandez | def validar_puerto(self, port): |
248 | 11 | cristobal hernandez | try: |
249 | 11 | cristobal hernandez | port = int(port) |
250 | 11 | cristobal hernandez | return 1 <= port <= 65535 |
251 | 11 | cristobal hernandez | except ValueError: |
252 | 11 | cristobal hernandez | return False |
253 | 11 | cristobal hernandez | |
254 | 11 | cristobal hernandez | def conectar_servidor(self, ip_entry, port_entry, scene): |
255 | 11 | cristobal hernandez | ip = ip_entry.get() |
256 | 11 | cristobal hernandez | port = port_entry.get() |
257 | 11 | cristobal hernandez | |
258 | 11 | cristobal hernandez | if not self.validar_ip(ip): |
259 | 11 | cristobal hernandez | messagebox.showerror("Error", "Dirección IP no válida.") |
260 | 11 | cristobal hernandez | return |
261 | 11 | cristobal hernandez | if not self.validar_puerto(port): |
262 | 11 | cristobal hernandez | messagebox.showerror("Error", "Puerto no válido. Debe estar entre 1 y 65535.") |
263 | 11 | cristobal hernandez | return |
264 | 11 | cristobal hernandez | |
265 | 11 | cristobal hernandez | port = int(port) |
266 | 11 | cristobal hernandez | |
267 | 11 | cristobal hernandez | try: |
268 | 11 | cristobal hernandez | self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
269 | 11 | cristobal hernandez | self.client_socket.connect((ip, port)) |
270 | 11 | cristobal hernandez | |
271 | 11 | cristobal hernandez | self.combobox_controles.config(state="reondly") |
272 | 11 | cristobal hernandez | self.combobox_controles.set("Botones") |
273 | 11 | cristobal hernandez | self.crear_botones() |
274 | 11 | cristobal hernandez | |
275 | 11 | cristobal hernandez | scene.destroy() |
276 | 11 | cristobal hernandez | |
277 | 11 | cristobal hernandez | self.current_funcion = self.ventana_desconectar_servidor |
278 | 11 | cristobal hernandez | self.current_image = self.imagen_conexion |
279 | 11 | cristobal hernandez | self.canvas_image = self.canvas.create_image((self.x0 + self.x1) / 2, (self.y0 + self.y1) / 2, image=self.current_image) |
280 | 11 | cristobal hernandez | self.canvas.image = self.current_image |
281 | 11 | cristobal hernandez | |
282 | 11 | cristobal hernandez | messagebox.showinfo("Éxito", "Conexión exitosa al servidor.") |
283 | 11 | cristobal hernandez | except socket.error as e: |
284 | 11 | cristobal hernandez | messagebox.showerror("Error", f"Error al conectar al servidor") |
285 | 11 | cristobal hernandez | except Exception as e: |
286 | 11 | cristobal hernandez | messagebox.showerror("Error", f"Ha ocurrido un error desconocido") |
287 | 11 | cristobal hernandez | |
288 | 11 | cristobal hernandez | |
289 | 11 | cristobal hernandez | |
290 | 11 | cristobal hernandez | def ventana_conexion_servidor(self): |
291 | 11 | cristobal hernandez | self.secondary_window = tk.Toplevel(self.root) |
292 | 11 | cristobal hernandez | self.secondary_window.title("Ingresar IP y Puerto") |
293 | 11 | cristobal hernandez | self.secondary_window.geometry("400x225") |
294 | 11 | cristobal hernandez | self.secondary_window.config(bg="#0F2B6A") |
295 | 11 | cristobal hernandez | self.secondary_window.resizable(0, 0) |
296 | 11 | cristobal hernandez | self.secondary_window.iconbitmap("resources2/logoBlitz.png") |
297 | 11 | cristobal hernandez | |
298 | 11 | cristobal hernandez | tk.Label(self.secondary_window, text="IP del Servidor:", font=("Helvetica ", 9, "bold")).pack(pady=(20,5)) |
299 | 11 | cristobal hernandez | self.ip_entry = tk.Entry(self.secondary_window) |
300 | 11 | cristobal hernandez | self.ip_entry.pack(pady=5) |
301 | 11 | cristobal hernandez | |
302 | 11 | cristobal hernandez | tk.Label(self.secondary_window, text="Puerto del Servidor:", font=("Helvetica ", 9, "bold")).pack(pady=5) |
303 | 11 | cristobal hernandez | self.port_entry = tk.Entry(self.secondary_window) |
304 | 11 | cristobal hernandez | self.port_entry.pack(pady=5) |
305 | 11 | cristobal hernandez | |
306 | 11 | cristobal hernandez | confirm_button = tk.Button(self.secondary_window, text="Conectar", bg="#22c8c9", command=lambda: self.conectar_servidor(self.ip_entry, self.port_entry, self.secondary_window)) |
307 | 11 | cristobal hernandez | confirm_button.pack(pady=5) |
308 | 11 | cristobal hernandez | |
309 | 11 | cristobal hernandez | ip_save_button = tk.Button(self.secondary_window, text="Ingresar IP guardada", bg="#22c8c9", command=lambda: self.ingresar_ip_guardada(self.ip_entry, self.port_entry)) |
310 | 11 | cristobal hernandez | ip_save_button.pack() |
311 | 11 | cristobal hernandez | |
312 | 11 | cristobal hernandez | def ingresar_ip_guardada(self, ip_entry, port_entry): |
313 | 11 | cristobal hernandez | ip_entry.delete(0, tk.END) |
314 | 11 | cristobal hernandez | ip_entry.insert(0, "192.168.144.84") |
315 | 11 | cristobal hernandez | |
316 | 11 | cristobal hernandez | port_entry.delete(0, tk.END) |
317 | 11 | cristobal hernandez | port_entry.insert(0, "8080") |
318 | 11 | cristobal hernandez | |
319 | 11 | cristobal hernandez | def ventana_desconectar_servidor(self): |
320 | 11 | cristobal hernandez | if messagebox.askyesno("Confirmación", "¿Está seguro que quiere desconectar del servidor?"): |
321 | 11 | cristobal hernandez | self.client_socket.close() |
322 | 11 | cristobal hernandez | |
323 | 11 | cristobal hernandez | self.current_funcion = self.ventana_conexion_servidor |
324 | 11 | cristobal hernandez | self.current_image = self.imagen_desconexion |
325 | 11 | cristobal hernandez | self.canvas_image = self.canvas.create_image((self.x0 + self.x1) / 2, (self.y0 + self.y1) / 2, image=self.current_image) |
326 | 11 | cristobal hernandez | self.canvas.image = self.current_image |
327 | 11 | cristobal hernandez | self.eliminar_teclas_y_botones() |
328 | 11 | cristobal hernandez | |
329 | 11 | cristobal hernandez | |
330 | 11 | cristobal hernandez | def moveUp(self): |
331 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('w')])) |
332 | 11 | cristobal hernandez | |
333 | 11 | cristobal hernandez | def moveDown(self): |
334 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('s')])) |
335 | 11 | cristobal hernandez | |
336 | 11 | cristobal hernandez | def moveRight(self): |
337 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('d')])) |
338 | 11 | cristobal hernandez | |
339 | 11 | cristobal hernandez | def moveLeft(self): |
340 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('a')])) |
341 | 11 | cristobal hernandez | |
342 | 11 | cristobal hernandez | def upCraw(self): |
343 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('l')])) |
344 | 11 | cristobal hernandez | |
345 | 11 | cristobal hernandez | def downCraw(self): |
346 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('k')])) |
347 | 11 | cristobal hernandez | |
348 | 11 | cristobal hernandez | def grab(self): |
349 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('x')])) |
350 | 11 | cristobal hernandez | |
351 | 11 | cristobal hernandez | def drop(self): |
352 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord('c')])) |
353 | 11 | cristobal hernandez | |
354 | 11 | cristobal hernandez | def stop(self): |
355 | 11 | cristobal hernandez | self.client_socket.send(bytes([ord(' ')])) |
356 | 11 | cristobal hernandez | |
357 | 11 | cristobal hernandez | if __name__ == "__main__": |
358 | 11 | cristobal hernandez | root = tk.Tk() |
359 | 11 | cristobal hernandez | app = Aplicacion(root) |
360 | 11 | cristobal hernandez | root.mainloop() |
361 | 8 | cristobal hernandez | </code></pre> |