Foros del Web » Programando para Internet » PHP » PHP-GTK »

Cerrar GtkDialog sin cerrar la aplicación

Estas en el tema de Cerrar GtkDialog sin cerrar la aplicación en el foro de PHP-GTK en Foros del Web. Al ejecutar el programa no sé como hacer para que al 'clicked' del botón <cancelar> se cierre la ventana de diálogo pero no la aplicación. ...
  #1 (permalink)  
Antiguo 14/05/2005, 03:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 9
Antigüedad: 20 años, 2 meses
Puntos: 0
Cerrar GtkDialog sin cerrar la aplicación

Al ejecutar el programa no sé como hacer para que al 'clicked' del botón <cancelar> se cierre la ventana de diálogo pero no la aplicación.

Este es el código:

<?php

if (!extension_loaded('gtk')) {
dl( 'php_gtk.' . PHP_SHLIB_SUFFIX);
}

function shutdown() {

Gtk::main_quit();
}

function Cancel() {


}

function Dialog() {
$dialog = &new GtkDialog();
$dialog->set_title("¡ AVISO !");
$dialog->set_position(GTK_WIN_POS_CENTER);
$dialog->connect_object("destroy", array("gtk", "main_quit"));

$dialog->show();

$dialog_vbox = $dialog->vbox;
$dialog_action_area = $dialog->action_area;

$user_info_label = &new GtkLabel(" ¿Realmente, quiere cerrar la aplicación? ");
$dialog_vbox->pack_start($user_info_label);
$user_info_label->show();

$ok_button = &new GtkButton("OK");
$dialog_action_area->pack_start($ok_button);
$ok_button->connect('clicked', 'shutdown');
$ok_button->show();

$cancel_button = &new GtkButton("Cancel");
$dialog_action_area->pack_start($cancel_button);
$cancel_button->connect('clicked', 'cancel');

$cancel_button->show();
}

$window = &new GtkWindow();
$window->set_title("Aplicación");
$window->connect('destroy', 'shutdown');

$button = &new GtkButton(' Cerrar ');
$button->connect('clicked', 'Dialog');
$window->add($button);

$window->show_all();
Gtk::main();

?>


Si me podéis echar una mano, agradecido.

Saludos.

Última edición por tony2005; 14/05/2005 a las 05:37
  #2 (permalink)  
Antiguo 16/05/2005, 10:17
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 23 años
Puntos: 8
Veo que conectaste el la señal 'clicked' del boton
Código PHP:
$cancel_button->connect('clicked''cancel'); 
Y despues la funcion cancel seria algo asi
Código PHP:
function Cancel($boton) {  // el parametro $boton es pasado automaticamente cuando usas connect()
$boton->destroy();


*creo* que tambien deberias hacer lo mismo en
Código PHP:
$dialog->connect_object("destroy", array("gtk""main_quit");
/*porque cuando apretas la "X" (de cerrar las ventanitas) en este caso de te cierra todo*/ 
)


Saludos
  #3 (permalink)  
Antiguo 16/05/2005, 14:10
 
Fecha de Ingreso: mayo-2005
Mensajes: 9
Antigüedad: 20 años, 2 meses
Puntos: 0
Gracias por tu respuesta.

Con la función Cancelar que me has puesto se destruye el botón pero no la ventanita.

Y añadiendo $boton aquí:
$dialog->connect_object("destroy", array("gtk", "main_quit"), $boton);

se sigue cerrando la aplicación.
  #4 (permalink)  
Antiguo 17/05/2005, 08:43
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 9 meses
Puntos: 5
main_quit cierra el bucle de vida que crea main, para cerrar la ventana la debes destruir la ventana, o bien, hacer uso de las funciones estaticas gtk::grab_add() y gtk::grab_remove() te recomiendo que le eches un vistazo: http://gtk.php.net/manual/en/gtk.functions.php

Lo mas correcto seria destruir la ventana con sus objetos, es decir, cuando se emite el evento destroy de la ventana de dialogo, haces un funcion destroy, destruyendo el objeto de la ventana, que lo puedes pasar por referencia, ya que al hacer un connect() la funcion que es invocada contiene varias variables correspondientes al objeto que lo conecta.

Te recomiendo que leas mas acerca del funcionamiento de GTK ya que creo que tienes conceptos equivocados

Puedes leer algo sobre PHP-GTK en zonaphp.com
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 17/05/2005, 09:48
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 23 años
Puntos: 8
Cita:
Con la función Cancelar que me has puesto se destruye el botón pero no la ventanita.
Tenes razon, si que le erre feo
Una opcion es, cuando haces el connect(), incluir otro parametro que sea el $dialog (o una referencia, en esto no estoy seguro), y en la funcion candel lo destruyes.
Código PHP:
$cancel_button->connect('clicked''cancel'$dialog); // si no alda pruega con &$dialog 
y el la funcion
Código PHP:
function Cancel($boton$dialogo) {  // de nuevo, si no anda proba como referencia; &dialogo
$dialogo->destroy(); 



Cita:
$dialog->connect_object("destroy", array("gtk", "main_quit"), $boton);
Cuando usas connect_object(), el segundo parametro es el llamda "callback", o nombre de la funcion que se llamara cuando ocurra ese evento. En este caso concreto "destroy".
Entonces como 2° parametro (no como tercero como has puesto) pon el nombre de la funcion que se llamara. Teniendo en cuenta el caso anterior del boton podes armarte algo.

Tambien, experimenta poniendo como callback:
Código PHP:
$dialog->connect_object("destroy", array($dialog"destroy")); 

<offtopic>
Perdon por darte codigo erroneo, por lo general trato de asegurarme que lo que posteo sea lo correcto. Es que ultimamente entro al foro desde otro lado y no tengo php local como para probar las cosas.
Lo mismo vale para este ultimo mensaje jajaja.

</offtopic>

Saludos y suerte.
  #6 (permalink)  
Antiguo 17/05/2005, 09:53
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 23 años
Puntos: 8
Aca hay otros links complementando los de epplestun
http://gtk.php.net/manual/en/signals.php
y
http://gtk.php.net/manual/en/gtk.gtk...od.connect.php
  #7 (permalink)  
Antiguo 17/05/2005, 15:51
 
Fecha de Ingreso: mayo-2005
Mensajes: 9
Antigüedad: 20 años, 2 meses
Puntos: 0
Gracias Fran.

Creo haberlo comprendido perfectamente en la práctica.

Los links los tengo pero el idioma, para mí, es una barrera y los ejemplos no abundan. Tampoco tengo una formación reglada en programación.

Si no os importa, a medida que continúe mis prácticas os iré planteando problemillas concretos como este que me ayuden a inducir el proceso.

Gracias a los dos por vuestras respuestas. 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 04:10.