Capturando teclas pressionadas em um GtkEntry

Adicionar evento conforme a tecla pressionada é uma tarefa bastante procurada. Isso por que muitos utilizam teclas como ENTER para mudar campo, fazer validações, ou até mesmo para formatar os dados. Com essa mesma técnica é possível modificar o que já foi escrito, deixando tudo em maiúsculo ou minusculo por exemplo

Imagem

Exemplo

/**
 * Seta a codificação do programa
 */
ini_set("php-gtk.codepage", "UTF-8");
	
/**
 * Classe de exemplo
 * 
 * @name Demo
 * @author Bruno P. Gonçalves <http: //bruno.pitteli.com.br></http:>
 * @download <http: //code.google.com/p/fabulafw></http:>
 */
class Demo {
	/**
	 * Armazena os widgets necessarios
	 * 
	 * @access private
	 * @property array $widgets
	 */
	public $widgets = array();
	
	/**
	 * Armazena o estado do window
	 * 
	 * @access private
	 * @property integer $state 
	 */
	private $state;
	
	/**
	 * @name __construct()
	 * @return Demo
	 */
	public function __construct() {
		// Cria a janela
		$this->widgets['frmDemo'] = new GtkWindow();
		$this->widgets['frmDemo']->set_size_request(250, 250);
		$this->widgets['frmDemo']->set_position(Gtk::WIN_POS_CENTER_ALWAYS);
		$this->widgets['frmDemo']->set_title("Demo");
		$this->widgets['frmDemo']->connect("destroy", array($this, "frmDemo_unload"));
		
		// Cria o container
		$fixed = new GtkFixed();
         
		// Cria o GtkEntry
		$this->widgets['txtDemo'] = new GtkEntry();
		$this->widgets['txtDemo']->connect("key-press-event", array($this, "txtDemo_onkeypress"));
		$fixed->put($this->widgets['txtDemo'], 8, 8);
		
		// Inicia a aplicação
		$this->widgets['frmDemo']->add($fixed);
		$this->frmDemo_onload();
	}
	
	/**
	 * Método do carregamento do formulario
	 * 
	 * @name frmDemo_onload()
	 */
	public function frmDemo_onload() {
		// Inicia o estado
		$this->state = 0;
		
		// Inicia a aplicação
		$this->widgets['frmDemo']->show_all();
		Gtk::main();
	}
	
	/**
	 * Método do descarregamento do formulario
	 * 
	 * @name frmDemo_unload()
	 */
	public function frmDemo_unload() {
		// Encerra a aplicação
		Gtk::main_quit();
		exit(0);
	}
	
	/**
	 * Método chamado ao apertar uma tecla no GtkEntry
	 * 
	 * @name txtDemo_onkeypress
	 * @param GtkEntry $widget GtkEntry do sinal
	 * @param GtkEvent $event Objeto com as informações do evento
	 */
	public function txtDemo_onkeypress($widget, $event) {
		// Verifica se é a tecla ENTER
		if($event->keyval == Gdk::KEY_Return) {
			// Fecha a aplicação
			$this->widgets['frmDemo']->destroy();
		}
	}
}
	
/**
 * Inicia o demo
 */
new Demo();

Referências

http://gtk.php.net/manual/en/gtk.gtkentry.php
http://gtk.php.net/manual/en/appendix.keysyms.php
http://gtk.php.net/manual/en/gdk.enum.modifiertype.php
http://gtk.php.net/manual/en/gdk.gdkevent.php
http://gtk.php.net/manual/en/gtk.gtkwidget.signal.key-press-event.php