• Publicidad

Crear interfaz gráfica con Win32::GUI

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

Re: Crear interfaz gráfica con Win32::GUI

Notapor Txemaracas » 2011-09-19 06:42 @320

No sé si he entendido bien lo que me dijiste, creo que sí. Hice esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub init{
  2.     &comprobarDB();               # Llamada a subrutina CompararDB.
  3.  
  4.     my $grupo = @_;
  5.     my($conexion,$sth);               # Declaración de las  variables que utilizaremos a continuación.
  6.  
  7.     $conexion = ConectarDBcon->connect(); #  Conectamos con la  base de datos desde el paquete ConectarDB y lo dejamos en la variable $dbh.
  8.  
  9.     #Leer datos.
  10.  
  11.     print "$grupo\n";
  12.  
  13.  
  14.     #Crear.
  15.  
  16.     &crearTabla($grupo, $conexion);
  17.  
  18.  
  19.     #Desconectar.
  20.  
  21.     $conexion->disconnect;
  22.    
  23. }
  24. # Subrutina crearTabla.
  25.  
  26. sub  crearTabla {
  27.  
  28.       my($conexion,$tabla);
  29.  
  30.       $tabla = $_[0];
  31.  
  32.       $conexion = $_[1];                                                                           #Desde la llamada a la subrutina le pasamos la  conexión a  la base de datos. Desde la llamada  sería la  segunda  variable  que le pasamos.
  33.  
  34.       eval  {$conexion->do("CREATE TABLE $tabla (nombre VARCHAR(30), correo VARCHAR(100))")};     #Hacemos un eval, cuya función será dejar que la tabla   se cree o no dependiendo de si existe,y desde la conexión a la  base de datos hacemos  crearemos la tabla  si  no existe  ya.
  35.  
  36.       if ($@) {
  37.  
  38.             printf("La tabla existe \n")                                                            # Se captura el error si la tabla existe y nos dice que "La  tabla  existe".
  39.  
  40.       }
  41.  
  42. }
  43.  
  44.  
  45. #Subrutina  comprobarDB.
  46.  
  47. sub comprobarDB {
  48.  
  49.  
  50.         my @databases = DBI->data_sources("mysql", {host => 'localhost', user => 'root', password => 'password'});# Cogemos la lista de bases de datos presentes en el sistema.
  51.  
  52.         my $base_datos = 'contactos';                              #Introducimos el nombre de la  base de datos que queremos comprobar que está  en la variable $base_datos.
  53.  
  54.         my $dsn = "DBI:mysql:$base_datos";                         # Conformamos el DSN de esa base de datos.
  55.  
  56.         unless ($dsn ~~ @databases) {                              # Si el $dsn no está entre las @databases la creamos.
  57.  
  58.                 my $drh = DBI->install_driver("mysql");            # Carga del controlador mysql
  59.  
  60.                 my $rc = $drh->func("createdb", $base_datos, 'localhost', 'root', 'password', 'admin');# Creamos la base de datos.
  61.         }
  62.  
  63. }
  64.  
  65.  
  66. 1;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


y la llamada desde la interfaz:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub Button13_Click {
  2.         my $texto = $ventanaCG->TextFieldcg1->Text();
  3.         print $texto,"\n";
  4.        
  5.         crearGrupo->init($texto);
  6.        
  7.         $ventanaCG->TextFieldcg2->Text("Listo!!!!!");  
  8.         return 0;
  9. };
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



No me crea todavía el grupo y cuando ejecuto me devuelve el nombre que puse en textfield y un 2 después; el nombre es del print() de la interfaz y el 2 será del print() del init(). Hay algo que estoy haciendo mal, pero no sé qué es.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Publicidad

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-09-19 07:13 @342

El error está en la línea 4, por algo que ya te he explicado dos veces, en dos mensajes anteriores.
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: Crear interfaz gráfica con Win32::GUI

Notapor Txemaracas » 2011-09-19 09:37 @442

Si es que he usado las tres opciones pero si uso my $grupo=@_; me escribe un 2; si uso my ($grupo)=@_; y my $grupo=shift; me escribe crearGrupo siempre, no el nombre que introduzco yo. ¿Puede ser por la llamada que hago desde la interfaz?
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-09-19 11:26 @518

Cuando, en la línea 5, pones

crearGrupo->init($texto);

Perl mete en la pila de argumentos, el valor 'crearGrupo' y luego el de $texto.

Por eso te sale un 2 cuando no pones paréntesis. Y te sale 'crearGrupo' cuando lo usas bien.

Lo único que te falta es extraer el valor de grupo de forma correcta:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $self  = shift;
  2. my $grupo = shift;
Coloreado en 0.001 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

Re: Crear interfaz gráfica con Win32::GUI

Notapor Txemaracas » 2011-09-23 09:45 @448

Hola. Pongo esta duda por si alguien tiene alguna idea u opinión sobre qué hacer. Tengo la interfaz hecha pero me falta una cosa que me está dando muchos quebraderos de cabeza. Quiero poder mostrar los datos de los usuarios de la base de datos y poder seleccionarlos. El ejemplo que puse al principio es el de los correos de Hotmail. Se muestran los correos y al lado de cada uno un cuadradito para seleccionarlo. En este caso sería un RadioButton pero, claro, tengo problemas para mostrar los datos. Uso :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $ventanaC->AddTextfield(
  2.     -name      => "Mostar",
  3.     -pos       => [200, 50],
  4.     -size      => [360, 400],
  5.     -multiline => 1,
  6.     -hscroll   => 1,
  7.     -vscroll   => 1,
  8.     -autohscroll => 1,
  9.     -autovscroll => 1,
  10.     -keepselection => 1 ,
  11.     -font => $EditFont,
  12.     -onResize   => \&Notepad_OnSize,
  13. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y claro, con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $ventanaC->Mostar->Text("");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero no sé cómo hacerlo para dividirlo en filas.

He pensado también si poder hacer una tabla.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-09-23 11:09 @506

En la página de manual de Win32::GUI::Textfield se comenta que el delimitador entre las líneas de ese texto ha de ser los caracteres "\r\n".

De todas maneras, un campo de texto está bien para sacar un listado de registros, pero si luego quieres hacer algo más con ellos, quizás te sea más fácil usar un ListView (lista) o un Grid (rejilla).
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: Crear interfaz gráfica con Win32::GUI

Notapor Txemaracas » 2011-09-26 08:09 @381

Hola tengo una duda porque estuve mirando en Internet como poder agregar un radioButton en una de las celdas. Encontré que en Java sí se puede; con Tk, también, pero no sé cómo poder hacerlo con Win32::GUI. El código que utilizo es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub Button2_Click {
  2.    
  3.         $ventanaC->Show();
  4.        
  5.         my $conexion = ConectarDBcon->connect();                              # Recogemos la  conexión en esta variable.
  6.  
  7.         my $sth = $conexion->prepare("show tables")or die("Couldn't prepare statement: " . $conexion->errstr); # Cogemos los nombres de las tablas de la base de datos que le hemos pasado en la conexión.
  8.  
  9.         $sth->execute() or die("Couldn't execute statement: " . $sth->errstr);                                 # Ejecutamos la  acción.
  10.    
  11.         my @tables = &misTablas($conexion);                                     # Declaración del array en el cual introduciremos cada uno de los nombres de las tablas que hemos seleccionado.
  12.        
  13.         my $fila = 1;
  14.         my $columna = 1;
  15.         my $cont = 0;
  16.        
  17.         my $val = $GridC->SetRows(30);
  18.         $GridC->SetHandleTabKey(True);
  19.        
  20.         for my $tabla (@tables) {
  21.            
  22.                            
  23.                 #$GridC->SetCellText($fila, $columna,addRadioButton());
  24.                 $GridC->SetCellText($fila, $columna,"   $tabla   ");
  25.                
  26.                 my $sel = $conexion->prepare("SELECT * FROM $tabla") or die("Couldn't prepare statement: " . $conexion->errstr); # Cogemos los nombres de las tablas de la base de datos que le hemos pasado en la conexión.
  27.  
  28.                 $sel->execute() or die("Couldn't execute statement: " . $sth->errstr);
  29.                 $columna++;
  30.            
  31.                 while (my $ref = $sel->fetchrow_hashref()){
  32.                        
  33.                         $fila++;
  34.                        
  35.                         my  $nombre= $ref->{'nombre'};
  36.                        
  37.                         print "$nombre\n";
  38.                        
  39.                         $GridC->SetCellText($fila, $columna,"   $nombre   ");
  40.                        
  41.                         $columna++;
  42.                        
  43.                         my  $correo = $ref->{'correo'};
  44.                        
  45.                         $GridC->SetCellText($fila, $columna,"   $correo   ");
  46.                        
  47.                         $columna = 2;
  48.                          
  49.                 }
  50.                
  51.                 $columna=1;
  52.                 $fila=  $fila+2;          
  53.         }
  54.            
  55.         return 0;
  56. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


He intentado hacer lo que pongo en la línea 23 pero no funciona. ¿Hay alguna manera de añadir un radio button por cada línea?
Adjuntos
pant.JPG
pant.JPG (41.75 KiB) Visto 597 veces
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-09-26 09:23 @433

No veo la opción de poner radio botones, pero sí cajas de marcado de opciones.

Según la documentación de Win32::GUI::Grid debes cambiar el tipo de la celda a GVIT_CHECK (CheckBox) con SetDefCellType() o SetCellType().

Luego, podrás indicar el estado de la marca, con SetCellCheck() o SetCellOptions().
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: Crear interfaz gráfica con Win32::GUI

Notapor Txemaracas » 2011-09-26 09:29 @436

Gracias explorer. Ahora lo estaba escribiendo, que había encontrado la solución entre los demos de Win32::GUI.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $GridC->SetCellType($fila, $columna, GVIT_CHECK);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz gráfica con Win32::GUI

Notapor Txemaracas » 2011-09-28 10:39 @485

He modificado el Grid como quería pero a la hora de seleccionar un grupo y de esta forma seleccionar todos los contactos pertenecientes a él, se me bloquea el programa solo cuando intento seleccionar el último grupo, el cual no me deja clicar y al hacerlo se bloquea. El código es el siguiente (he puesto en el campo texto "" en cada casilla con un checkBox para poder identificarlas):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub Grid_Click {
  2.     my ( $row, $col ) = @_;
  3.  
  4.     my $estado = $GridC->GetCellCheck( $row, $col );
  5.  
  6.     my $text = $GridC->GetCellText( $row, $col );
  7.  
  8.     if ( $col == 0 and $estado == 1 ) {
  9.  
  10.         $col = 1;
  11.         $row++;
  12.         $text = $GridC->GetCellText( $row, $col );
  13.         while ( $text eq "" ) {
  14.  
  15.             $GridC->SetCellCheck( $row, $col, 1 );
  16.             $row++;
  17.             $text = $GridC->GetCellText( $row, $col );
  18.         }
  19.     }
  20.     elsif ( $col == 0 and $estado == 0 ) {
  21.  
  22.         $col = 1;
  23.         $row++;
  24.         $text = $GridC->GetCellText( $row, $col );
  25.         while ( $text eq "" ) {
  26.  
  27.             $GridC->SetCellCheck( $row, $col, 0 );
  28.             $row++;
  29.             $text = $GridC->GetCellText( $row, $col );
  30.         }
  31.     }
  32. }
  33.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Adjuntos
pant2.JPG
pant2.JPG (42.33 KiB) Visto 591 veces
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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

cron