Criação de um aplicativo Vala + Gtk3. [1ª parte]

Depois primeira postagem Eu li um comentário que seria melhor começar com algo mais complexo do que um "hello world", então farei uma sequência (3 ou 4) postar a criação de um aplicativo simples (com vala + gtk 3).

O aplicativo consistirá em um jogo simples de perguntas e respostas de múltipla escolha (tipo Trivia), em que responder a 3 perguntas termina errado (game over), e o objetivo é responder o maior número de perguntas possível, para cada questão que você limitou tempo para resposta.

Projeto

O design principal de nosso aplicativo será:

app

Posteriormente colocaremos alguns botões que nos darão a opção de 50% (eliminando duas respostas erradas), congelar o tempo, passar uma pergunta. Todos eles podem ser usados ​​apenas uma vez, sendo desativados uma vez usados.

Projete um Código
Como podemos ver no design, podemos ver os elementos gtk que usaremos:

Respostas -> Botão.

Pergunta -> Etiqueta.

Tempo -> ProgressBar.

Pontos e perguntas errados / corretos -> Etiqueta.

Podemos ver que temos uma estrutura vertical, portanto, podemos usar GBox verticalmente.

Código

int main (string [] args) {Gtk.init (ref args); janela var = novo Gtk.Window (); window.title = "app"; window.window_position = Gtk.WindowPosition.CENTER; window.set_default_size (300, 340); window.destroy.connect (Gtk.main_quit); window.set_border_width (10); // caixa vertical var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Rótulo para a questão var question = new Gtk.Label ("Question?"); // barra de tempo progressiva var time_bar = new Gtk.ProgressBar (); time_bar.set_text ("Time"); time_bar.set_show_text (true); // Botões de resposta var response1 = new Gtk.Button.with_label ("Response 1"); var resposta2 = novo Gtk.Button.with_label ("Responder 2"); var resposta3 = novo Gtk.Button.with_label ("Responder 3"); var resposta4 = novo Gtk.Button.with_label ("Responder 4"); // informação dos rótulos var points = new Gtk.Label ("Points: 0"); box.pack_start (pergunta); box.pack_start (time_bar); box.pack_start (reply1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (pontos); window.add (caixa); window.show_all (); Gtk.main (); return 0;}

Captura de 2013/11/02 21:44:14

Para mover o "tempo" usamos GLib.Timeout onde a cada 500 milissegundos ele será ativado (é um loop onde a variável que contém o valor de nossa barra aumentará)

GLib.Timeout.add (500, () => {// Obtenha o progresso atual: // (0.0 -> 0%; 1.0 -> 100%) double progress = time_bar.get_fraction (); // Atualize a barra: progress = progress + 0.01; time_bar.set_fraction (progress); // Repete até 100% retornar progresso <1.0;});

Links de interesse 
http://www.valadoc.org/#!wiki=index (você pode encontrar todos os elementos gtk com seus métodos ...)


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Lozanotux dito

    Muito bom, vou perguntar como posso fazer uma espécie de TABS mas verticalmente, embora não tenham que ser necessariamente tabs, podem ser botões ou ToggleButtons, mas preciso do comportamento de uma tab, que ao tocar em 1 seu conteúdo é visto e a outra aba está desabilitada, não sei se me explico, deixo uma imagem para ver se você pode me dar alguma informação para investigar. Obrigado!

    IMAGEM: http://i.imm.io/1jURw.png

    1.    lolbimbo dito

      O "layout" ou a mudança de texto (por exemplo)?

  2.   Pandev92 dito

    Parla catalã

  3.   atordoado dito

    Isso é muito bom na verdade é algo parecido com o que eu estava procurando, uma pergunta, essa pergunta poderia estar ligada ao terminal de alguma forma?
    Por exemplo: Para começar aproveito para responder deixo no ilimitado e é isso que gostaria de fazer.

    Qual ambiente de área de trabalho você deseja instalar?
    KDE
    Gnome 3
    Canela
    Unity

    E cada um destes que estava ligado ao seu respectivo comando de instalação no terminal, sudo apt-get install ubuntu-desktop

    1.    lolbimbo dito

      Sim, você apenas teria que escrever Process.spawn_command_line_async ("apt-get install ubuntu-desktop");

      http://valadoc.org/#!api=glib-2.0/GLib.Process.spawn_command_line_sync

  4.   Saulo Uribe dito

    Excelente, gostei do post, estarei praticando (e estou ansioso por isso), saudações