• Publicidad

Ayuda con TextView y TextEntry

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

Ayuda con TextView y TextEntry

Notapor proxy_lainux » 2009-05-10 20:38 @901

Hola

Una pregunta... ¿cómo puedo hacer esto en un TextView?

Código: Seleccionar todo
"\n"


Es que todo me aparece así

Código: Seleccionar todo
holamundoadiosmundo


y quisiera que me apareciera así en el textview

Código: Seleccionar todo
hola
mundo
adios
mundo


También quisiera saber si puedo aumentar el tamaño a un TextEntry tanto vertical como horizontal.

salu2
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943

Publicidad

Notapor explorer » 2009-05-11 03:05 @170

¿Qué es un TextView? ¿Un programa o un módulo de Perl?

Cuando empieces un nuevo hilo, debes dar toda la información posible, porque sino, no sabemos a qué te refieres.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor proxy_lainux » 2009-05-11 10:45 @490

Ok, lo siento.

Esto fue con lo que aprendí a hacer un textview

TextView

Para lidiar con regiones de texto ( + 1 linea) tendremos que jugar, como mínimo, con dos widgets: Gtk2::TextView y Gtk2::TextBuffer. Hay muchos mas (Gtk2::TextIter, Gtk2::TextTag, Gtk2::TextMark ...), pero para visualizar poco texto, es suficiente con estos dos. Con el widget Gtk2::TextBuffer administraremos el texto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
# Creamos un buffer de texto
$buffer = Gtk2::TextBuffer->new;
# Insertamos el texto de la variable texto en la posición del cursor
$buffer->insert_at_cursor($texto);
# Creamos el widget visor de texto y lo llenamos con el contenido de $buffer
$visor = new Gtk2::TextView();
$visor->set_buffer($buffer)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Es como una caja de texto para Gtk2.

El problema es que cuando le agrego información, todo me aparece así:

Código: Seleccionar todo
holamundoadiosmundo


y quisiera saber si es posible que me aparezca así

Código: Seleccionar todo
hola
mundo
adios
mundo


Ya intenté agregándole un scroll, pero se sigue visualizando igual.

Aunque tengo una duda...

widgets: Gtk2::TextView y Gtk2::TextBuffer...pero para visualizar poco texto, es suficiente con estos dos.


Y lo quiero para visualizar todo el mensaje de un mail, pero no sé si textview me sirve para lo que necesito ¿o sería mejor utilizar otra cosa?, ¿ustedes qué me recomiendan y/o cómo puedo hacer que el mensaje me aparezca en vertical cuando entre en textview?

salu2
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943

Notapor explorer » 2009-05-11 11:55 @538

Encontré, en los tutoriales que hay por Internet, dos formas de trabajar.

En http://forgeftp.novell.com//gtk2-perl-s ... x2553.html

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 43                     my $tview = Gtk2::TextView->new();
 44                             my $content = `cat ./lyrics.txt`;
 45                     my $buffer = $tview->get_buffer();
 46                     $buffer->set_text($content);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


ves que el texto se lee desde un fichero y se mete directamente al control TextView.

En http://www.mogaal.com/articulos/perl-gl ... html#toc13

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        ### Declaro un buffer que contendrá la información, estará vacío
          ### pero ya al menos tenemos una referencia a él para luego
        ### poder introducir información.
 
        $buffer_de_texto = Gtk2::TextBuffer->new;
        my $archivo_seleccionado = $ventana_selector_de_archivos->get_filename;
        open(LISTA, "$archivo_seleccionado") || die('No pude abrir el archivo');
        while(<LISTA>){
                ### Se lee cada línea del archivo y a su vez se introduce
                ### al buffer que declaramos anteriormente.
                $buffer_de_texto->insert_at_cursor("$_");
        }
        close(LISTA);
 
        ### Ahora le asigno a la vista de texto el buffer ya atestado
        ### de información.
        $vista_de_texto->set_buffer($buffer_de_texto);
        $ventana_selector_de_archivos->hide;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Aquí ves como se van agregando las líneas, una a una a un ojeto TextBuffer. Y al final, se asigna a un objeto $vista_de_texto (TreeView).

Parece que hay varias formas de hacerlo...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor proxy_lainux » 2009-05-11 14:47 @657

Hola

No puedo creerlo, solo hice esto y ya lo logré:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach($reco->Body(1)){
$buff->insert_at_cursor("$_\n");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Únicamente incluí "\n" junto a $_, y lo había hecho pero en el buffer y así: && "\n" ó (,"\n") y pues ninguno me funcionaba...

Ahora, tengo unas dudas con esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
/^(Subject):\s+/
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Me imagino que /^ busca en una cadena Subject, ¿no?

¿Por qué después de (Subject) se agrega esto: :?

Después \s busca una separación, ¿no?

pero ¿por qué después se agrega esto: +/. Esto, ¿qué significa?

También tengo este problema... al crear un label y un TextEntry, me aparecen así:

Código: Seleccionar todo
               label  <------------------------------>  TextEntry


TextEntry es como una caja de texto (Gtk2::Entry).

Pero como mencioné me aparecen así, el label muy separado del borde de la ventana (Gtk2::WIndow) y también el label y el textentry están muy separados...

Código: Seleccionar todo
 <----------> Subject <---------------------------> |_____________________|


y me gustaría que me aparecieran así, el label más cerca del borde de la ventana y el label junto con el textentry más unidos... algo así:

Código: Seleccionar todo
Subject  |______________________|


Ya intenté moverle a HBox(Gtk2::HBox) pero solo logro separarlos más, y unirlos no puedo, y tampoco con set_justify; también intente buscar un poco sobre label en Gtk, pero no sé si no entendí o no encontré algo que me sirviera, aunque vi que colocaban labels en frames y les aparecían más unidas las cosas, ¿pero alguien sabe algo de esto...?

salu2
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943

Notapor explorer » 2009-05-11 15:10 @674

Sí, suele pasar que si no enseñas el código, no podemos ver los errores más evidentes :)

Sobre la expresión regular
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
/^(Subject):\s+/
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
quiere decir: Busca, al comienzo de la línea (^) la palabra Subject, y la guardas en $1 (por efecto de los paréntesis de captura), que esté seguida del carácter ':', y seguida por uno o más (+) caracteres espacio en blanco (\s).

En cuanto a la posición de los componentes gráficos, creo que hay que ajustar las banderas de espaciado a la hora de colocarles en el componente padre.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor proxy_lainux » 2009-05-11 17:21 @764

No entendí bien: ¿cómo que acomodar las banderas de espaciado?... ¿hay alguna función para buscar en Google sobre eso?

Mientras les dejo este código... ya me fijé y el problema creo que está en esta parte del código
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$tree->set_size_request(700,300);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


si lo quitan queda todo mas unido, pero si lo colocan de nuevo... los labels se separan mucho

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use Glib qw/TRUE FALSE/;
use Gtk2 '-init';

$win = Gtk2::Window->new('toplevel');
$win->set_title('Belial & Grimoire');
$win->set_border_width(5);
$win->signal_connect(delete_event => sub {Gtk2->main_quit()});

$box1 = Gtk2::HBox->new(FALSE,1);
$box = Gtk2::HBox->new(FALSE,1);
$vbox = Gtk2::VBox->new(FALSE,5);

my $lab = Gtk2::Label->new;
$lab->set_text('subject');

my $te = Gtk2::Entry->new;
$te->append_text('holaa');
my $lab2 = Gtk2::Label->new;
$lab2->set_text('subject');

my $te2 = Gtk2::Entry->new;
$te2->append_text('holaaa');

$tree = Gtk2::TreeView->new;
$tree->set_size_request(700,300);
my $scr = Gtk2::ScrolledWindow->new(undef,undef);
$scr->set_policy('always','always');
$scr->set_shadow_type('in');
$scr->add($tree);

$box1->add($lab);
$box1->add($te);
$box->add($lab2);
$box->add($te2);

$vbox->pack_end($scr,FALSE,FALSE,1);
$vbox->pack_end($sep = Gtk2::HSeparator->new,FALSE,FALSE,1);
$vbox->pack_end($box,FALSE,FALSE,1);
$vbox->pack_end($sep = Gtk2::HSeparator->new,FALSE,FALSE,1);
$vbox->pack_end($box1,FALSE,FALSE,1);

$win->add($vbox);
$win->show_all;

Gtk2->main;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


También con ScrolledWindow lo coloca así

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$scr = Gtk2::ScrolledWindow->new;
$scr->set_policy('never','always');
$scr->set_shadow_type('in');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y le meten información a TreeView, se hace grande automáticamente, pero las cosas se separan también...

Y necesito hacer que TreeView esté grande y que lo demás se quede unido, ¿hay alguna forma de hacer eso?
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943

Notapor explorer » 2009-05-11 18:38 @818

Mirando el ejemplo, y usando pack_start en lugar de pack_end, sí que sale como quieres:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
#use strict;
#use warnings;
#use diagnostics;

use Glib qw/TRUE FALSE/;
use Gtk2 '-init';

$win = Gtk2::Window->new('toplevel');
$win->set_title('Belial & Grimoire');
$win->set_border_width(5);
$win->signal_connect(delete_event => sub {Gtk2->main_quit()});

my $vbox    = Gtk2::VBox->new(FALSE, 0);

    my $hbox1   = Gtk2::HBox->new(FALSE,0);

        my $label1 = Gtk2::Label->new('subject1');
#        $label1->set_alignment(0.0, 0.0);
        my $entry1 = Gtk2::Entry->new;
        $entry1->append_text('hola1');
        $entry1->set_alignment(0.0);

    $hbox1->pack_start($label1, FALSE, FALSE, 10);
    $hbox1->pack_start($entry1, FALSE, FALSE, 0);

$vbox->pack_start($hbox1, FALSE, FALSE, 0);
$vbox->pack_start(Gtk2::HSeparator->new(),FALSE,FALSE,3);

    my $hbox2   = Gtk2::HBox->new(FALSE,0);

        my $label2 = Gtk2::Label->new('subject2');
#        $label2->set_alignment(0.0, 0.0);
        my $entry2 = Gtk2::Entry->new;
        $entry2->append_text('hola2');
        $entry2->set_alignment(0.0);

    $hbox2->pack_start($label2, FALSE, FALSE, 10);
    $hbox2->pack_start($entry2, FALSE, FALSE, 0);

$vbox->pack_start($hbox2, FALSE, FALSE, 0);
$vbox->pack_start(Gtk2::HSeparator->new(),FALSE,FALSE,3);

    my $scr = Gtk2::ScrolledWindow->new(undef,undef);
    $scr->set_policy('always','always');
    $scr->set_shadow_type('in');

        my $tree = Gtk2::TreeView->new;
        $tree->set_size_request(700,300);

    $scr->add($tree);

$vbox->pack_start($scr, FALSE, FALSE, 0);


$win->add($vbox);
$win->show_all;

Gtk2->main;

__END__
Coloreado en 0.002 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor proxy_lainux » 2009-05-11 21:41 @945

Hola.

Muchas gracias por la ayuda... espero no te esté molestando con tantas preguntas... jeje XD

Entonces, debo cambiar
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$box->add()
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

por pack_start(), ¿cierto?... así voy colocando las cosas en horizontal, y por lo que veo lo coloca pack_start() en la parte izquierda... y ya después con vbox le digo en qué parte verticalmente se va a colocar, ¿cierto?

O por lo menos espero haber entendido...

Una pregunta... ¿existe algo parecido a TreeView en Perl?
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943

Notapor explorer » 2009-05-12 03:32 @189

Sí, en efecto, cambiando add() por pack_start() ya funciona.

En cuanto a TreeView en Perl, no. Aunque se parece mucho a un arreglo de arreglos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
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 24 invitados

cron