Project

General

Profile

Interfaz » History » Version 7

« Previous - Version 7/11 (diff) - Next » - Current version
cristobal hernandez, 12/12/2024 08:46 PM


Interfaz

import tkinter as tk

class Aplicacion:
    def __init__(self, root):
        self.root = root
        self.root.title("Blitz")
        self.root.geometry("800x450")
        self.root.resizable(0, 0)

        # Cargar el logo
        self.root.iconbitmap("resources/logo.ico")

        # Cargar la imagen de fondo
        self.imagen_fondo = tk.PhotoImage(file="resources/fondo1.png")

        # Crear un Canvas para colocar la imagen de fondo
        self.canvas = tk.Canvas(self.root, width=800, height=400)
        self.canvas.pack(fill="both", expand=True)

        # Colocar la imagen en el Canvas
        self.canvas.create_image(0, 0, image=self.imagen_fondo, anchor="nw")

        # Imágenes para los botones
        self.imagen_central = tk.PhotoImage(file="resources/center.png")
        self.imagen_arriba = tk.PhotoImage(file="resources/up.png")
        self.imagen_abajo = tk.PhotoImage(file="resources/down.png")
        self.imagen_izquierda = tk.PhotoImage(file="resources/left.png")
        self.imagen_derecha = tk.PhotoImage(file="resources/right.png")
        self.imagen_apagado = tk.PhotoImage(file="resources/off.png")

        # Cuadro "transparente" 
        self.canvas.create_rectangle(50, 210, 230, 390, fill="#052D45", stipple="gray50", outline="")

        self.crear_botones()

    def crear_botones(self):
        self.boton_central = tk.Button(self.root, image=self.imagen_central, borderwidth=0, highlightthickness=0, cursor="hand2")
        self.canvas.create_window(140, 300, window=self.boton_central)

        self.boton_arriba = tk.Button(self.root, image=self.imagen_arriba, borderwidth=0, highlightthickness=0, cursor="hand2")
        self.canvas.create_window(140, 245, window=self.boton_arriba)

        self.boton_abajo = tk.Button(self.root, image=self.imagen_abajo, borderwidth=0, highlightthickness=0, cursor="hand2")
        self.canvas.create_window(140, 355, window=self.boton_abajo)

        self.boton_izquierda = tk.Button(self.root, image=self.imagen_izquierda, borderwidth=0, highlightthickness=0, cursor="hand2")
        self.canvas.create_window(85, 300, window=self.boton_izquierda)

        self.boton_derecha = tk.Button(self.root, image=self.imagen_derecha, borderwidth=0, highlightthickness=0, cursor="hand2")
        self.canvas.create_window(195, 300, window=self.boton_derecha)

        self.boton_apagado = tk.Button(self.root, image=self.imagen_apagado, borderwidth=0, highlightthickness=0, cursor="hand2")
        self.canvas.create_window(755, 400, window=self.boton_apagado)

if __name__ == "__main__":
    root = tk.Tk()
    app = Aplicacion(root)
    root.mainloop()

  1. Joystick
    def inicializar_pygame(self):
    pygame.init()
    pygame.joystick.init()

    if pygame.joystick.get_count() > 0:
    self.joystick = pygame.joystick.Joystick(0)
    self.joystick.init()
    print(f"Joystick detectado: {self.joystick.get_name()}")
    self.running = True
    self.verificar_eventos_pygame()
    else:
    print("No se detectó ningún joystick.")
    self.joystick = None
    pygame.quit()

    def verificar_eventos_pygame(self):
    if self.combobox_controles.get() != "Joystick":
    self.running = False
    pygame.quit()
    return

    for event in pygame.event.get():
    if pygame.joystick.get_count() == 0:
    self.running = False
    messagebox.showinfo("Información", "Se ha perdido la conexión con el mando.")
    return
    if event.type == pygame.JOYHATMOTION:
    self.manejar_hat(event)
    elif event.type in [pygame.JOYBUTTONDOWN, pygame.JOYBUTTONUP]:
    self.manejar_botones(event)
    elif self.joystick:
    self.manejar_joystick()
    self.root.after(60, self.verificar_eventos_pygame)

    def manejar_hat(self, event):
    hat_value = self.joystick.get_hat(0)
    direcciones = {(0, 1): self.moveUp, (0, -1): self.moveDown, (-1, 0): self.moveLeft, (1, 0): self.moveRight}

    if hat_value != (0, 0) and not self.key_pressed and hat_value in direcciones:
    direcciones[hat_value]()
    self.canvas.itemconfig(self.contenedor[hat_value], fill="#08FBF9")
    self.tecla_pressed = hat_value
    self.key_pressed = True
    elif hat_value == (0, 0) and self.tecla_pressed in direcciones:
    self.stop()
    self.canvas.itemconfig(self.contenedor[self.tecla_pressed], fill="#0F2B6A")
    self.key_pressed = False
    self.tecla_pressed = None

    def manejar_botones(self, event):
    button_mapping = {
    0: self.grab, # button_x
    1: self.drop, # button_circle
    8: self.upCraw, # button_l2
    9: self.downCraw # button_r2
    }

    if event.type == pygame.JOYBUTTONDOWN and event.button in button_mapping:
    self.botones_presionados.add(event.button)
    if not self.key_pressed:
    button_mapping[event.button]()
    self.tecla_pressed = event.button
    self.key_pressed = True
    self.canvas.itemconfig(self.contenedor[self.tecla_pressed], fill="#08FBF9")
    elif event.type  pygame.JOYBUTTONUP and event.button in self.botones_presionados:
    self.botones_presionados.discard(event.button)
    if event.button self.tecla_pressed:
    self.canvas.itemconfig(self.contenedor[self.tecla_pressed], fill="#0F2B6A")
    self.key_pressed = False
    self.tecla_pressed = None

    def manejar_joystick(self):
    eje_x = self.joystick.get_axis(0)
    eje_y = self.joystick.get_axis(1)

    eje_x_redondeado = round(eje_x, 1)
    eje_y_redondeado = round(eje_y, 1)
    if abs(eje_x_redondeado) < 0.9 and abs(eje_y_redondeado) < 0.9:
    if self.tecla_pressed == "c":
    self.stop()
    self.canvas.itemconfig(self.contenedor["c"], fill="white")
    self.key_pressed = False
    self.tecla_pressed = None
    else:
    direcciones_x = {1: self.moveRight, -1: self.moveLeft}
    direcciones_y = {1: self.moveDown, -1: self.moveUp}
    if eje_x_redondeado > 0.89 and not self.key_pressed:  # Derecha
    direcciones_x[1]()
    self.canvas.itemconfig(self.contenedor["c"], fill="#08FBF9")
    self.tecla_pressed = "c"
    self.key_pressed = True
    elif eje_x_redondeado < -0.89 and not self.key_pressed:  # Izquierda
    direcciones_x[-1]()
    self.canvas.itemconfig(self.contenedor["c"], fill="#08FBF9")
    self.tecla_pressed = "c"
    self.key_pressed = True
    elif eje_y_redondeado > 0.89 and not self.key_pressed:  # Abajo
    direcciones_y[1]()
    self.canvas.itemconfig(self.contenedor["c"], fill="#08FBF9")
    self.tecla_pressed = "c"
    self.key_pressed = True
    elif eje_y_redondeado < -0.89 and not self.key_pressed:  # Arriba
    direcciones_y[-1]()
    self.canvas.itemconfig(self.contenedor["c"], fill="#08FBF9")
    self.tecla_pressed = "c"
    self.key_pressed = True
    nuevo_x = 350 + eje_x * 50
    nuevo_y = 275 + eje_y * 50
    self.pos_x = nuevo_x
    self.pos_y = nuevo_y
    self.canvas.coords(self.contenedor["c"], self.pos_x - 10, self.pos_y - 10, self.pos_x + 10, self.pos_y + 10)