Creazione di un'app Vala + Gtk3. [Prima parte]

Dopo primo post Ho letto un commento secondo cui sarebbe stato meglio iniziare con qualcosa di più complesso di un "ciao mondo", quindi farò una sequenza (3 o 4) post creando una semplice applicazione (con vala + gtk 3).

L'applicazione consisterà in un semplice gioco di domande e risposte a scelta multipla (tipo Trivia), in cui rispondere a 3 domande termina erroneamente (game over), e l'obiettivo è rispondere a quante più domande possibili, per ogni domanda hai un tempo limitato rispondere.

disegno

Il design principale della nostra applicazione sarà:

App

Successivamente inseriremo alcuni pulsanti che ci daranno l'opzione del 50% (eliminando due risposte sbagliate), congelare il tempo, passare una domanda. Tutti possono essere utilizzati una sola volta, essendo disabilitati una volta utilizzati.

Progettare un Codice
Come possiamo vedere nel design possiamo vedere gli elementi gtk che useremo:

Risposte -> Pulsante.

Domanda -> Etichetta.

Ora -> ProgressBar.

Punti e domande errati / corretti -> Etichetta.

Possiamo vedere che abbiamo una struttura verticale quindi possiamo usare GBox verticalmente.

Codice

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); // box verticale var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Etichetta per la domanda var question = new Gtk.Label ("Question?"); // barra temporale progressiva var time_bar = new Gtk.ProgressBar (); time_bar.set_text ("Time"); time_bar.set_show_text (true); // Pulsanti di risposta var response1 = new Gtk.Button.with_label ("Response 1"); var resposta2 = new Gtk.Button.with_label ("Rispondi 2"); var resposta3 = new Gtk.Button.with_label ("Rispondi 3"); var resposta4 = new Gtk.Button.with_label ("Rispondi 4"); // etichette info var points = new Gtk.Label ("Points: 0"); box.pack_start (domanda); box.pack_start (time_bar); box.pack_start (reply1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (punti); window.add (box); window.show_all (); Gtk.main (); return 0;}

Cattura da 2013-11-02 21:44:14

Per spostare il "tempo" utilizziamo GLib.Timeout dove ogni 500 millisecondi verrà attivato (è un loop dove la variabile che contiene il valore della nostra barra aumenterà)

GLib.Timeout.add (500, () => {// Ottieni il progresso corrente: // (0.0 -> 0%; 1.0 -> 100%) double progress = time_bar.get_fraction (); // Aggiorna la barra: progress = progress + 0.01; time_bar.set_fraction (progress); // Ripeti fino al 100% return progress <1.0;});

Link di interesse 
http://www.valadoc.org/#!wiki=index (puoi trovare tutti gli elementi gtk con i loro metodi ...)


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   lozanotux suddetto

    Molto bene, lascia che ti chieda come posso creare una sorta di TAB ma verticalmente, sebbene non debbano necessariamente essere tab, possono essere pulsanti o ToggleButtons, ma ho bisogno del comportamento di una tab, che quando si tocca 1 il suo contenuto si vede e l'altra scheda è disabilitata, non so se mi spiego, lascio un'immagine per vedere se puoi darmi qualche informazione per approfondire. Grazie!

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

    1.    lolbimbo suddetto

      Il "layout" o il testo cambia (ad esempio)?

  2.   pandev92 suddetto

    Il catalano parla

  3.   stordito suddetto

    Questo è molto buono in effetti è qualcosa di simile a quello che stavo cercando, una domanda, questa domanda potrebbe essere collegata in qualche modo al terminale?
    Ad esempio: per iniziare mi prendo il tempo per rispondere lo lascio illimitato e questo sarebbe quello che vorrei fare.

    Quale ambiente desktop vuoi installare?
    KDE
    Gnome 3
    Cannella
    Unità

    E ognuno di questi era collegato al rispettivo comando di installazione nel terminale, sudo apt-get install ubuntu-desktop

    1.    lolbimbo suddetto

      Sì, dovresti solo scrivere 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 suddetto

    Eccellente, mi piace il post, mi eserciterò (e non vedo l'ora di andare avanti), saluti