Construindo interfaces PHP-GTK com Vbox e Hbox

Eu não costumo muito usar VBox ou HBox, porque acho o Fixed mais fácil para trabalhar, mas como na programação se tem casos e casos, é bom a gente saber um pouco de tudo. E realmente para deixar uma janela com a opção de "resize" de forma fácil, eu precisei usar um VBox, a principio ficou uma interface feia, com os widgets com tamanhos estranhos, diferentes dos setados por mim no "set_size_request", estão resolvi pesquisar um pouco o funcionamento do Box, e agora vou mostrar como fazer uma interface "bonitinha" usando HBox e VBox. Bom o segredo está em 2 pontos, o primeiro é na hora de se criar o VBox ou HBox, neste momento você deve especificar o "homogeneous" como falso, a propriedade "homogeneous" diz ao GTK se todos os widgets que forem adicionados ao VBox ou HBox deverão ter o mesmo espaço no VBox ou HBox, veja abaixo como fazer.

 // o 2 é a quantidade de espaços que o VBox terá $this->widgets['vbox'] = new GtkVBox(false, 2); 

o segundo ponto é na hora de adicionar o widget ao VBox ou HBox, você deverá especificar a propriedade "expand" da função "pack_start" como falso, a propriedade "expand" diz ao GTK que o widget não usará o espaço extra do VBox ou HBox, veja abaixo o exemplo. Eu mesei que ficou meio confuso, mas para clarear as idéias segue abaixo o código completo do exemplo que eu criei, e interfacephp.

 widgets['janela'] = new GtkWindow(); $this->widgets['janela']->set_size_request(600, 400); $this->widgets['janela']->set_title("Exemplo com VBox e HBox"); $this->widgets['janela']->set_position(Gtk::WIN_POS_CENTER_ALWAYS); // Cria o VBox $this->widgets['vbox'] = new GtkVBox(false, 2); $this->widgets['janela']->add($this->widgets['vbox']);  // Cria um MenuBar $this->widgets['menuBar'] = new GtkMenuBar(); $this->widgets['menuBar']->set_size_request(false, 25);  $this->widgets['vbox']->pack_start($this->widgets['menuBar'], false); // Cria o MenuItem "Arquivo" $this->widgets['menuItem_arquivo'] = new GtkMenuItem("Arquivo"); // Cria o Menu que contera os MenuItens para o MenuItem "Arquivo" $this->widgets['menu_arquivo'] = new GtkMenu(); // Cria os MenuItens $this->widgets['menuItem_Abrir'] = new GtkMenuItem("Abrir"); $this->widgets['menuItem_Novo'] = new GtkMenuItem("Novo"); $this->widgets['menuItem_Salvar'] = new GtkMenuItem("Salvar"); // Adiciona os MenuItens ao Menu $this->widgets['menu_arquivo']->append($this->widgets['menuItem_Abrir']); $this->widgets['menu_arquivo']->append($this->widgets['menuItem_Novo']); $this->widgets['menu_arquivo']->append($this->widgets['menuItem_Salvar']); // Seta o Menu como SubMenu do MenuItem "Arquivos" $this->widgets['menuItem_arquivo']->set_submenu($this->widgets['menu_arquivo']); // Adiciona o MenuItem "Arquivos" $this->widgets['menuBar']->append($this->widgets['menuItem_arquivo']); // Cria o HBox $this->widgets['hbox'] = new GtkHBox(false, 2); $this->widgets['vbox']->pack_start($this->widgets['hbox']); // Cria um Fixed $this->widgets['fixed'] = new GtkFixed(); $this->widgets['fixed']->set_size_request(200, false); $this->widgets['hbox']->pack_start($this->widgets['fixed'], false); //Cria um Formulário  $this->widgets['fixed']->put(GtkLabel("Nome:"), 10, 10); $this->widgets['txtNome'] = new GtkEntry();  $this->widgets['txtNome']->set_size_request(170, 25); $this->widgets['fixed']->put($this->widgets['txtNome'], 10, 30); $this->widgets['fixed']->put(new GtkLabel("Idade:"), 10, 80); $this->widgets['txtIdade'] = new GtkEntry(); $this->widgets['txtIdade']->set_size_request(170, 25); $this->widgets['fixed']->put($this->widgets['txtIdade'], 10, 100); // Cria um Button $this->widgets['button'] = GtkButton("Botão"); $this->widgets['button']->set_size_request(100, 35); $this->widgets['fixed']->put($this->widgets['button'], 50, 150); // Cria um TextView $this->widgets['textView'] = new GtkTextView(); $this->widgets['hbox']->pack_start($this->widgets['textView']); // Cria um TextBuffer $this->widgets['textBuffer'] = new GtkTextBuffer(); $this->widgets['textBuffer']->set_text("\n\n\n Este é um exemplo simples de como construir uma interface com PHP-GTK usando VBox e HBox"); $this->widgets['textView']->set_buffer($this->widgets['textBuffer']); // Monstra os widgets da janela principal $this->widgets['janela']->show_all(); // Inicia o loop GTK Gtk::main(); } } new itf(); ?> 

2 comentários sobre “Construindo interfaces PHP-GTK com Vbox e Hbox

Os comentários estão encerrados.