Project

General

Profile

INTERFAZ.py

Fabian Diaz, 01/03/2024 12:32 PM

Download (7.06 KB)

 
1
import socket
2
import tkinter as tk
3
from tkinter import ttk
4
from tkinter import messagebox
5
import tkinter.font as font
6
from tkinter import PhotoImage
7
import os
8
from tkinter import *
9

    
10
AVANZAR = 'avanzar'
11
RETROCEDER = 'retroceder'
12
CLOSE = 'close'
13
DERECHA='derecha'
14
IZQUIERDA='izquierda'
15
GOLPEAR='golpear'
16
ATRAS='atras'
17
ADELANTE='adelante'
18
DESCONECTAR='desconectar'
19
ANGULO_30='30°'
20
ANGULO_45='45°'
21
ANGULO_60='60°'
22
ANGULO_90='90°'
23
MOVER='mover'
24

    
25
def conectar(ventana):
26
    try:
27
        port=12345
28
        host=direccion_ip.get()
29
        global client
30
        client = socket.socket()
31
        client.connect((host, port))
32
        print(client.recv(1024).decode())
33
        estado_label.config(text="Estado: Conectado")
34
        boton_conectar.config(state=tk.DISABLED)
35
        ventana.destroy()
36
    except socket.error:
37
        estado_label.config(text="Estado: Fallo al conectar")
38
        boton_conectar.config(state=tk.NORMAL)
39
        ventana.destroy()
40
        messagebox.showwarning("Conexión erronea","No se ha logrado al conexíon, verifique la IP")
41
    
42
def ventana_ip():
43
    boton_conectar.config(state=tk.DISABLED)
44
    ventana_2 = tk.Toplevel(ventana)
45
    ventana_2.title("Conexión a servidor")
46
    ventana_2.configure(bg="#ABDBD8")
47
    ventana_2.geometry("150x120")
48

    
49
    etiqueta_ip = tk.Label(ventana_2, fg=a,text="Ingresar dirección de IP:", bg="#567E8B")
50
    etiqueta_ip.pack(pady=10)
51

    
52
    global direccion_ip 
53
    direccion_ip= tk.Entry(ventana_2,bg=a)
54
    direccion_ip.pack(pady=10)
55
    estado_label.config(text="Estado: Conectando")
56

    
57
    boton_ingresar = tk.Button(ventana_2, text="Ingresar",fg=a, command=lambda:conectar(ventana_2),bg="#567E8B")
58
    boton_ingresar.pack(pady=10)
59

    
60
# funciones
61
def avanzar():
62
    client.send(AVANZAR.encode())
63
    estado_label.config(text="Estado: Avanzando")
64
    print("Avanzando")
65
def retroceder():
66
    client.send(RETROCEDER.encode())
67
    print("Retrocediendo")
68
    estado_label.config(text="Estado: Retrocediendo")
69
def girar_der():
70
    client.send(DERECHA.encode())
71
    estado_label.config(text="Estado: Girando hacia la Derecha")
72
    print("Girando derecha")
73
def girar_izq():
74
    client.send(IZQUIERDA.encode())
75
    estado_label.config(text="Estado: Girando hacia la Izquierda")
76
    print("Girando izquierda")
77
def rotar_brazo_Atras():
78
    client.send(ATRAS.encode())
79
    estado_label.config(text="Estado: Ajustando brazo hacia Atras")
80
def rotar_brazo_Adelante():
81
    client.send(ADELANTE.encode())
82
    estado_label.config(text="Estado: Ajustando brazo hacia Adelante")
83
def angulo():
84
    angulo_seleccinado=etiquetas_angulo.get()
85
    if(angulo_seleccinado=="30°"):
86
        etiquetas_angulo.set('')
87
        client.send(ANGULO_30.encode())
88
        estado_label.config(text="Estado: Inclinado angulo 30°")
89
    elif(angulo_seleccinado=="45°"):
90
        etiquetas_angulo.set('')
91
        client.send(ANGULO_45.encode())
92
        estado_label.config(text="Estado: Inclinado angulo 45°")
93
    elif(angulo_seleccinado=="60°"):
94
        etiquetas_angulo.set('')
95
        client.send(ANGULO_60.encode())
96
        estado_label.config(text="Estado: Inclinado angulo 60°")
97
    elif(angulo_seleccinado=="90°"):
98
        etiquetas_angulo.set('')
99
        client.send(ANGULO_90.encode())
100
        estado_label.config(text="Estado: Inclinado angulo 90°")
101
    else:
102
        estado_label.config(text="Estado: Angulo no encontrado")
103

    
104
def golpear():
105
    client.send(GOLPEAR.encode())
106
    estado_label.config(text="Estado: Golpeando")
107
def desconectar():
108
    client.send(DESCONECTAR.encode())
109
    estado_label.config(text="Estado: Desconectado")
110
    client.close()
111
    ventana.destroy()
112
def mover():
113
    client.send(MOVER.encode())
114
    estado_label.config(text="Estado: Realizando Movimientos")
115
# Crear la ventana principal de Tkinter
116
ventana = tk.Tk()
117
ventana.title("Control de Robot con Palo de Golf")
118
ventana.config(bg="#ABDBD8")
119
a="white"
120
b="light goldenrod yellow"
121
buttonFont = font.Font(family='Helvetica', size=24, weight='bold')
122
buttonFontSec = font.Font(family='Helvetica', size=15, weight='bold')
123
boton_avanzar = tk.Button(ventana, text="^", command=avanzar, height=1, width=3, font=buttonFont,bg=a)
124
boton_retroceder = tk.Button(ventana, text="v", command=retroceder, height=1, width=3, font=buttonFont,bg=a)
125
boton_izquierda = tk.Button(ventana, text="<", command=girar_izq, height=1, width=3, font=buttonFont,bg=a)
126
boton_derecha = tk.Button(ventana, text=">", command=girar_der, height=1, width=3, font=buttonFont,bg=a)
127

    
128
imagen_abajo=PhotoImage(file="C:/Users/nombre/Desktop/abajo.png")
129
boton_rotar_atras = tk.Button(ventana,image=imagen_abajo, command=rotar_brazo_Atras, height=60, width=53, font=buttonFontSec,bg=a)
130

    
131
imagen_arriba=PhotoImage(file="C:/Users/nombre/Desktop/arriba.png")
132
boton_rotar_adelante = tk.Button(ventana,image=imagen_arriba, command=rotar_brazo_Adelante, height=60, width=53, font=buttonFontSec,bg=a)
133

    
134
imagen_golpe=PhotoImage(file="C:/Users/nombre/Desktop/golpe.png")
135
boton_golpear = tk.Button(ventana,image=imagen_golpe, command=golpear, height=60, width=53, font=buttonFontSec)
136
imagen_angulo=PhotoImage(file="C:/Users/nombre/Desktop/angulo.png")
137
boton_angulo= tk.Button(ventana, image=imagen_angulo, command=angulo, height=45 ,width=75,fg="white" ,font=buttonFontSec,bg="#567E8B")
138

    
139
imagen_apagar=PhotoImage(file="C:/Users/nombre/Desktop/apagar.png")
140
boton_apagar = tk.Button(ventana, image=imagen_apagar, command=desconectar, height=60, width=53, font=buttonFontSec,bg=a)
141

    
142
boton_conectar = tk.Button(ventana, text="Conectar", command=ventana_ip, height=1, width=8,fg="white" ,font=buttonFontSec,bg="#567E8B")
143
boton_conectar.grid(column=4, row=6, padx=10, pady=8, rowspan=1)
144

    
145
# Agrega la etiqueta para "Seleccionar Ángulo" y la caja desplegable
146
etiqueta_angulo = tk.Label(ventana, text="Seleccionar Ángulo", fg="white" ,  font=buttonFontSec,bg="#567E8B")
147
etiquetas_angulo = ttk.Combobox(ventana, values=["30°", "45°", "60°","90°"], font=buttonFontSec)
148

    
149
etiqueta_angulo.grid(column=3, row=0, padx=8, pady=8, columnspan=2, rowspan=1)
150
etiquetas_angulo.grid(column=3, row=1, padx=8, pady=8, columnspan=2, rowspan=1)
151
boton_angulo.grid(column=3, row=2, padx=8, pady=8, columnspan=2, rowspan=1)
152

    
153

    
154
imagen = PhotoImage(file="C:/Users/fabian/Desktop/KIKIS.png")
155
logo = tk.Button(ventana, image=imagen,command=mover, height=64, width=64, font=buttonFontSec,bg=a)
156
boton_rotar_adelante.grid(column=0, row=0, padx=8, pady=8)
157
boton_avanzar.grid(column=1, row=0, padx=8, pady=8)
158
boton_rotar_atras.grid(column=2, row=0, padx=8, pady=8)
159

    
160
boton_izquierda.grid(column=0, row=1, padx=8, pady=8)
161
logo.grid(column=1, row=1, padx=8, pady=8)
162
boton_derecha.grid(column=2, row=1, padx=8, pady=8)
163

    
164
boton_golpear.grid(column=0, row=2, padx=8, pady=8)
165
boton_retroceder.grid(column=1, row=2, padx=8, pady=8)
166

    
167
# Agrega el botón "Mover" debajo del botón de la flecha hacia la derecha
168
boton_apagar.grid(column=2, row=2, padx=8, pady=8)
169
estado_label = tk.Label(ventana, text="Estado: Desconectado",  fg="white" ,  font=buttonFontSec,bg="#567E8B")
170
estado_label.grid(row=6, column=0, columnspan=4, pady=8)
171
ventana.mainloop()