• Publicidad

Obtener datos de un textview

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Obtener datos de un textview

Notapor zackarias » 2011-09-28 12:27 @560

Hola:
Este es mi entorno gráfico del programa:
Imagen

Funciona de la siguiente forma:

El usuario abre un archivo gbk,y al presionar el botón se genera el resultado que se visualiza en el TextView, eso lo tengo ya realizado. Al apretar el botón guardar se abre la siguiente ventana.
Imagen

Mi problema es que no sé cómo puedo guardar los datos que se muestran en el TextView al presionar el botón guardar.


Si me pueden dar una idea sería de mucha ayuda.
Avatar de Usuario
zackarias
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2011-09-27 19:33 @856

Publicidad

Re: Obtener datos de un textview

Notapor explorer » 2011-09-28 12:37 @567

El resultado de la caja de diálogo del selector de ficheros es el nombre (y, a veces, ruta) del fichero en donde el usuario quiere guardar el resultado.

Lo que te queda por hacer es abrir ese fichero en modo escritura (con open()) y escribir en él el contenido que quieras.

Si el contenido es lo que contiene el TextView, pues sí, debes sacarlo antes.

Lo que no sabemos es qué entorno gráfico estás usando. ¿Gtk, Qt, Tk, Prima...?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Obtener datos de un textview

Notapor zackarias » 2011-09-28 13:05 @586

Gracias, explorer, por responder.

Estoy trabajando con Glade3 + gtk

Mira, este es mi script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use Gtk2 '-init';
  4. use Gtk2::GladeXML;
  5. use Bio::SeqIO;
  6.  
  7. # Variables
  8. my ( $programa, $ventana_principal, $seleccion_archivo );
  9. my ( $guardar_archivo, $archivo_seleccionadon, $ventana_texto, $crear_archivo );
  10. our ( $archivo_seleccionado, $buffer, $contenido, $ruta_seleccionada );
  11. $programa = Gtk2::GladeXML->new('interfaz.glade');
  12.  
  13. # Widgets
  14. $ventana_principal = $programa->get_widget('ventana_principal');
  15. $seleccion_archivo = $programa->get_widget('seleccion_archivo');
  16. $guardar_archivo   = $programa->get_widget('guardar_archivo');
  17. $ventana_texto     = $programa->get_widget('ventana_texto');
  18. $crear_archivo     = $programa->get_widget('crear_archivo');
  19. $programa->signal_autoconnect_from_package('main');
  20. $ventana_principal->show_all();
  21.  
  22. Gtk2->main;
  23.  
  24. # función para salir
  25. sub boton_cerrar_clicked_cb { Gtk2->main_quit; }
  26. sub boton_salir_activate_cb { Gtk2->main_quit; }
  27. sub guardar_clicked_cb      { $guardar_archivo->show_all(); }
  28. sub cancelar_clicked_cb     { $guardar_archivo->hide; }
  29.  
  30. # función para el botón de selección de archivo
  31. sub seleccion_archivo_file_set_cb {
  32.  
  33.     #entrega la direccion del archivo que se va abrir
  34.     $archivo_seleccionado = $seleccion_archivo->get_filename;
  35. }
  36.  
  37. #funcion del botón para guardar el archivo
  38. sub crear_archivo_clicked_cb {
  39.     $ruta_seleccionada = $crear_archivo->get_filename;
  40. }
  41.  
  42. # extrae el origen de replicación de un archivo GenBank y lo deja en forma de archivo FASTA
  43. sub aplicar_clicked_cb {
  44.  
  45.     #aquí va mi programa en bioperl
  46. }
  47.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Al tratar de usar get_filename() para obtener la ruta donde guardar, como lo hice para abrir el archivo me dice el siguiente error
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
***   Can't locate object method "get_filename" via package "Gtk2::Button" at programa.pl line 38.
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Lo que necesito es saber la ruta, para crear el archivo con el nombre que le puso el usuario y guardarlo en esa ruta.
Última edición por explorer el 2011-09-29 07:52 @370, editado 1 vez en total
Razón: Formateado de código con Perltidy
Avatar de Usuario
zackarias
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2011-09-27 19:33 @856

Re: Obtener datos de un textview

Notapor explorer » 2011-09-29 09:04 @419

El método get_filename() solo se puede aplicar a un objeto GtkFileChooserDialog, y el error dice que lo estás aplicando al botón (Gtk2::Button) 'seleccion_archivo'.

Aquí (7.1. Vistas de texto - Creando un lector de archivos) tienes un ejemplo casi idéntico a lo que quieres hacer.

Observa que el botón dispara el evento, y dentro de él, se accede a un objeto GtkFileChooserDialog, definido antes, en el Glade.

Actualización:

Fichero glade_selector_ficheros.glade (generado por glade-3, en modo libglade):
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0"?>
  2. <glade-interface>
  3.   <!-- interface-requires gtk+ 2.20 -->
  4.   <!-- interface-naming-policy project-wide -->
  5.   <widget class="GtkDialog" id="ventana_principal">
  6.     <property name="border_width">5</property>
  7.     <property name="default_width">640</property>
  8.     <property name="default_height">400</property>
  9.     <property name="type_hint">normal</property>
  10.     <property name="gravity">center</property>
  11.     <signal name="destroy" handler="on_ventana_principal_destroy"/>
  12.     <child internal-child="vbox">
  13.       <widget class="GtkVBox" id="dialog-vbox1">
  14.         <property name="visible">True</property>
  15.         <property name="orientation">vertical</property>
  16.         <property name="spacing">2</property>
  17.         <child>
  18.           <widget class="GtkLabel" id="label1">
  19.             <property name="visible">True</property>
  20.             <property name="xalign">0</property>
  21.             <property name="xpad">10</property>
  22.             <property name="ypad">3</property>
  23.             <property name="label">Lector de ficheros</property>
  24.             <property name="use_markup">True</property>
  25.             <property name="single_line_mode">True</property>
  26.           </widget>
  27.           <packing>
  28.             <property name="expand">False</property>
  29.             <property name="fill">False</property>
  30.             <property name="position">1</property>
  31.           </packing>
  32.         </child>
  33.         <child>
  34.           <widget class="GtkScrolledWindow" id="scrolledwindow1">
  35.             <property name="visible">True</property>
  36.             <property name="can_focus">True</property>
  37.             <property name="hscrollbar_policy">automatic</property>
  38.             <property name="vscrollbar_policy">automatic</property>
  39.             <child>
  40.               <widget class="GtkTextView" id="caja_texto">
  41.                 <property name="visible">True</property>
  42.                 <property name="can_focus">True</property>
  43.                 <property name="text" translatable="yes">
  44.  
  45.  
  46.  
  47.     Elija un fichero...</property>
  48.               </widget>
  49.             </child>
  50.           </widget>
  51.           <packing>
  52.             <property name="position">1</property>
  53.           </packing>
  54.         </child>
  55.         <child internal-child="action_area">
  56.           <widget class="GtkHButtonBox" id="dialog-action_area1">
  57.             <property name="visible">True</property>
  58.             <property name="layout_style">edge</property>
  59.             <child>
  60.               <widget class="GtkFileChooserButton" id="boton_ventana_selector_ficheros">
  61.                 <property name="visible">True</property>
  62.                 <signal name="file_set" handler="on_boton_ventana_selector_ficheros_file_set"/>
  63.               </widget>
  64.               <packing>
  65.                 <property name="expand">False</property>
  66.                 <property name="fill">False</property>
  67.                 <property name="position">0</property>
  68.               </packing>
  69.             </child>
  70.             <child>
  71.               <widget class="GtkButton" id="boton_salir">
  72.                 <property name="label">gtk-quit</property>
  73.                 <property name="visible">True</property>
  74.                 <property name="can_focus">True</property>
  75.                 <property name="receives_default">True</property>
  76.                 <property name="use_action_appearance">False</property>
  77.                 <property name="use_underline">True</property>
  78.                 <property name="use_stock">True</property>
  79.                 <signal name="clicked" handler="on_ventana_principal_destroy"/>
  80.               </widget>
  81.               <packing>
  82.                 <property name="expand">False</property>
  83.                 <property name="fill">False</property>
  84.                 <property name="position">1</property>
  85.               </packing>
  86.             </child>
  87.           </widget>
  88.           <packing>
  89.             <property name="expand">False</property>
  90.             <property name="pack_type">end</property>
  91.             <property name="position">0</property>
  92.           </packing>
  93.         </child>
  94.       </widget>
  95.     </child>
  96.   </widget>
  97. </glade-interface>
  98.  
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4

Programa Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. # Ejemplo de uso del Glade + Gtk2
  4. # Selector de ficheros y caja de texto
  5. #
  6.  
  7. use strict;
  8. use File::Slurp;
  9. use Gtk2 '-init';
  10. use Gtk2::GladeXML;
  11.  
  12. # Leer el fichero Glade
  13. my $programa = Gtk2::GladeXML->new('glade_selector_ficheros.glade');
  14. $programa->signal_autoconnect_from_package('main');
  15.  
  16. # Mostramos la ventana principal
  17. my $ventana_principal = $programa->get_widget('ventana_principal');
  18. $ventana_principal->show_all();
  19.  
  20. # Inicio del bucle
  21. Gtk2->main;
  22.  
  23. # Abrir el selector de ficheros
  24. sub on_boton_ventana_selector_ficheros_file_set {
  25.     my $boton_ventana_selector_ficheros = $programa->get_widget('boton_ventana_selector_ficheros');
  26.  
  27.     my $fichero = $boton_ventana_selector_ficheros->get_filename;
  28.  
  29.     print "[$fichero]\n";
  30.     if (-e $fichero) {                                        # Si existe el fichero
  31.         my $buffer = read_file($fichero);                     # Lo leemos
  32.         my $caja_texto = $programa->get_widget('caja_texto'); # Accedemos a la caja de texto
  33.         my $buffer_texto = Gtk2::TextBuffer->new;             # Creamos un buffer de texto
  34.         $buffer_texto->insert_at_cursor($buffer);             # Le metemos el texto del fichero
  35.         $caja_texto->set_buffer($buffer_texto);               # Asignamos a la caja el buffer de texto
  36.     }
  37. }
  38.  
  39. # Cerramos la aplicación
  40. sub on_ventana_principal_destroy {
  41.     Gtk2->main_quit;
  42.     print "Saliendo\n";
  43. }
  44.  
  45. __END__
  46.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron