Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ingresar datos en un TXT con GTK+

Estas en el tema de Ingresar datos en un TXT con GTK+ en el foro de C/C++ en Foros del Web. Buenas mi probema es el siguiente, yo tengo un boton y una entrada de texto, yo lo que quiero es que al apretar el boton ...
  #1 (permalink)  
Antiguo 23/04/2007, 15:13
Avatar de diegoag1  
Fecha de Ingreso: marzo-2004
Ubicación: El Pinar
Mensajes: 164
Antigüedad: 20 años, 8 meses
Puntos: 0
Ingresar datos en un TXT con GTK+

Buenas mi probema es el siguiente, yo tengo un boton y una entrada de texto, yo lo que quiero es que al apretar el boton me guarde el texto introducido en un archivo txt.

El problema es que no se donde esta el fallo en el programita que hice.

Código:
#include <stdlib.h>
#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>

void pegar(GtkWidget *widget,GtkWidget *entry, gpointer data){
  char *entry_text;
  entry_text= gtk_entry_get_text(GTK_ENTRY(entry));
  FILE *ar;
  ar=fopen("archivo.txt","w");
  if(ar==NULL){
  printf("ERROR");
  exit(1);
  }
  fprintf(ar,"%s\n",entry_text);
  fclose(ar);
}

int main (int argc, char *argv[]){
  
  GtkWidget *ventana;
  GtkWidget *boton;
  GtkWidget *entry;
  GtkWidget *vbox;
  
  gtk_init (&argc, &argv);
  ventana= gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (ventana), "Prueba");
 gtk_signal_connect(GTK_OBJECT(ventana),"delete_event",GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  gtk_container_border_width (GTK_CONTAINER (ventana), 10);
  
  vbox = gtk_vbox_new (FALSE, 0);
  gtk_container_add (GTK_CONTAINER (ventana), vbox);
  gtk_widget_show (vbox);
  
  boton = gtk_button_new_with_label ("lala");
  gtk_signal_connect (GTK_OBJECT (boton), "clicked",GTK_SIGNAL_FUNC (pegar),NULL);
  gtk_box_pack_start (GTK_BOX (vbox), boton, TRUE, TRUE, 0);
  gtk_widget_show (boton);
  
  entry = gtk_entry_new_with_max_length (50);
     gtk_signal_connect(GTK_OBJECT(entry),"activate",GTK_SIGNAL_FUNC(pegar),entry);
  gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
  gtk_widget_show (entry);
  
  gtk_widget_show (ventana);
  gtk_main ();
  
  
  
  return 0;
}
Si pudieran decirme cual es el error que cometo les agradeceria.

Desde ya mucha gracias.
Saludos
  #2 (permalink)  
Antiguo 25/04/2007, 22:00
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Re: Ingresar datos en un TXT con GTK+

Bueno, puude ver algo un poco extraño.

Cita:
gtk_signal_connect (GTK_OBJECT (boton), "clicked",GTK_SIGNAL_FUNC (pegar),NULL);
Aquí, al dar click llamas a tu funcion pegar, y no le pasas ningun tipo de argumento.

Por otro la do tienes esto:

Cita:
gtk_signal_connect(GTK_OBJECT(entry),"activate",GT K_SIGNAL_FUNC(pegar),entry);
No se que haga exactamente el evento "activate". Pero no le veo mucho sentido a esta parte.

Practicamente estaá diciendo esto:

Si hago click al boóon ó activo la caja de texto, llamo a la funcion "pegar".
Y pues en realidad lo que quieres es que SÓLO al hacer click al botón se llame a la funcion, asi que deberias quitar el segundo evento.

Por otro lado checa tu funcion pegar:


Cita:
void pegar(GtkWidget *widget,GtkWidget *entry, gpointer data){
char *entry_text;
entry_text= gtk_entry_get_text(GTK_ENTRY(entry));
.
.
*widget es el widget que produjo el evento, pero, entry que es? gpointer es NULL porque tu le pasaste NULL al conectar el evento.

Pero aqui donde indicaste que en realidad entry deberia ser la caja de texto que creaste?
Dónde le pasaste ese argumento?

te recomendaria que usaras el puntero gpointer para hacer una referencia a la caja de texto, algo asi:

Cita:
gtk_signal_connect (GTK_OBJECT (boton), "clicked",GTK_SIGNAL_FUNC (pegar),entry);
Y que tu funcion pegar, quede así.


Cita:
void pegar(GtkWidget *widget, gpointer data){
char *entry_text;
entry_text= gtk_entry_get_text(GTK_ENTRY(data);
FILE *ar;
ar=fopen("archivo.txt","w");
if(ar==NULL){
printf("ERROR");
exit(1);
}
fprintf(ar,"%s\n",entry_text);
fclose(ar);
}
No estoy seguro que los castings esten correcto, pero eso ya te toca a ti corregirlos en caso de que te salte un error.

Saludos
  #3 (permalink)  
Antiguo 26/04/2007, 20:26
Avatar de diegoag1  
Fecha de Ingreso: marzo-2004
Ubicación: El Pinar
Mensajes: 164
Antigüedad: 20 años, 8 meses
Puntos: 0
Re: Ingresar datos en un TXT con GTK+

Exelente!!, muchas gracias pude al fin hacerlo funcionar corrijiendo todos los errores que mencionaste (que eran muchos).

Por otro lado me doy cuenta que tenias razon sobre usar glade, porque la verdad hacer solo la parte grafica es un parto.

Saludos
  #4 (permalink)  
Antiguo 27/04/2007, 17:19
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Re: Ingresar datos en un TXT con GTK+

Cita:
Iniciado por diegoag1 Ver Mensaje
Exelente!!, muchas gracias pude al fin hacerlo funcionar corrijiendo todos los errores que mencionaste (que eran muchos).

Por otro lado me doy cuenta que tenias razon sobre usar glade, porque la verdad hacer solo la parte grafica es un parto.

Saludos
Que bueno que te haya servido.

Y bueno, nunca esta de mas saber como hacer el programa a mano para después al usar glade saber como están las raices.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:07.