Creant una app Vala + Gtk3. [1ª part]

Després del primer post llei un comentari que estaria millor començar amb una mica més complex que un «hola món», llavors faré una successió (O 3 4) De post creant una senzilla aplicació (amb vala + gtk 3).

L'aplicació consistirà en un senzill joc de preguntes i respostes tipus test (tipus Triviados), en la qual a l'respondre malament 3 preguntes s'acaba (game over), i l'objectiu és respondre tantes preguntes com et sigui possible, per a cada pregunta teniu un temps limitat per respondre.

Disseny

Disseny principal de la nostra aplicació serà:

aplicació

Més endavant posarem uns botons que ens donaran l'opció de 50% (eliminant dues respostes errònies), congelar el temps, passar una pregunta. Tots ells només es podran fer servir un cop, quedant inhabilitats un cop usats.

disseny a Codi
Com podem veure en el disseny podem veure els elements gtk que farem servir:

Respostes -> Button.

Pregunta -> Label.

Temps -> ProgressBar.

Punts i preguntes errònies / correctes -> Label.

Podem veure que tenim una estructura vertical per tant podrem utilitzar GBox en forma vertical.

Codi

int main (string [] args) {Gtk.init (ref args); var window = new 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); // Label per a la pregunta var pregunta = new Gtk.Label ( "Pregunta?"); // barra prograsiva de el temps var barra_tiempo = new Gtk.ProgressBar (); barra_tiempo.set_text ( "Temps"); barra_tiempo.set_show_text (true); // Botons de resposta var resposta1 = new Gtk.Button.with_label ( "Resposta 1"); var resposta2 = new Gtk.Button.with_label ( "Resposta 2"); var resposta3 = new Gtk.Button.with_label ( "Resposta 3"); var resposta4 = new Gtk.Button.with_label ( "Resposta 4"); // labels info var punts = new Gtk.Label ( "Punts: 0"); box.pack_start (pregunta); box.pack_start (barra_tiempo); box.pack_start (resposta1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (punts); window.add (box); window.show_all (); Gtk.main (); return 0;}

Captura de 2013 11:02:21

Per moure el «temps» fem servir GLib.Timeout on a cada 500 mil·lisegons s'activarà (és un bucle on incrementés la variable que contingui el valor de la nostra barra)

GLib.Timeout.add (500, () => {// Get the current progress: // (0.0 -> 0%; 1.0 -> 100%) double progress = barra_tiempo.get_fraction (); // Update the bar: progress = progress + 0.01; barra_tiempo.set_fraction (progress); // Repeat until 100% return progress <1.0;});

Links d'interès 
http://www.valadoc.org/#!wiki=index (Pots trobar tots els elements gtk amb els seus mètodes ...)


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   lozanotux va dir

    Molt bo, che et faig una consulta com puc fer una mena de PESTANYES però de forma vertical, tot i que no necessàriament han de ser pestanyes poden ser botons o ToggleButtons, però necessito el comportament d'una pestanya, que a l'tocar 1 es vegi el seu contingut i l'altra pestanya es desactivi, no sé si m'explico deixo una imatge a veure si pots donar-me alguna dada com per investigar. Gràcies!

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

    1.    lolbimbo va dir

      El «layout» o el canvi de text (per exemple)?

  2.   pandev92 va dir

    parla català

  3.   atonides va dir

    Això està molt bé de fet és una cosa semblant al que anava buscant, una pregunta ¿aquest pregunta es podria enllaçar amb la terminal d'alguna manera?
    Per exemple: Per començar trec el temps per contestar el deixo en il limitat i seria així el que voldria fer.

    ¿Que entorn d'escriptori vol instal·lar?
    KDE
    Gnome 3
    Canela
    Unitat

    I cada un d'aquests que estigués enllaçat el seu respectiu ordre d'instalacion a la terminal, sudo apt-get install ubuntu-desktop

    1.    lolbimbo va dir

      Si, només hauries d'escriure Process.spawn_command_line_async ( «apt-get install ubuntu-desktop»);

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

  4.   Saul Uribe va dir

    Excel·lent, em grat el post, estaré practicant (i veig per avançar-me), salutacions