Skapa en Vala + Gtk3-app. [Första delen]

Efter första inlägget Jag läste en kommentar att det vore bättre att börja med något mer komplicerat än en "hejvärld", då kommer jag att göra en sekvens (3 o 4) inlägg skapa en enkel applikation (med vala + gtk 3).

Applikationen kommer att bestå av ett enkelt flervalsfråga- och svarsspel (Trivia-typ), där svar på tre frågor fel slutar (spelet är slut), och målet är att svara på så många frågor som möjligt för varje fråga du har begränsad tid till svar.

Design

Huvuddesignen för vår ansökan kommer att vara:

app

Senare kommer vi att sätta några knappar som ger oss möjlighet till 50% (eliminera två felaktiga svar), frysa tid, skicka en fråga. Alla kan bara användas en gång, avaktiveras en gång.

Design a Kod
Som vi kan se i designen kan vi se de gtk-element som vi kommer att använda:

Svar -> Knapp.

Fråga -> Etikett.

Tid -> ProgressBar.

Fel / rätta punkter och frågor -> Etikett.

Vi kan se att vi har en vertikal struktur, därför kan vi använda GBox vertikalt.

Kod

int main (sträng [] args) {Gtk.init (ref args); var fönster = nytt 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); // vertikal ruta var ruta = ny Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Etikett för frågan var fråga = ny Gtk.Label ("Fråga?"); // progressiv tidsfält var time_bar = ny Gtk.ProgressBar (); time_bar.set_text ("Time"); time_bar.set_show_text (true); // Svarsknappar var respons1 = ny Gtk.Button.with_label ("Svar 1"); var resposta2 = ny Gtk.Button.with_label ("Svara 2"); var resposta3 = ny Gtk.Button.with_label ("Svara 3"); var resposta4 = ny Gtk.Button.with_label ("Svara 4"); // labels info var points = new Gtk.Label ("Points: 0"); box.pack_start (fråga); box.pack_start (tidsfält); box.pack_start (svar1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (poäng); window.add (rutan); window.show_all (); Gtk.main (); returnera 0;}

Fånga från 2013-11-02 21:44:14

För att flytta "tiden" använder vi GLib.Timeout där varje 500 millisekunder aktiveras (det är en slinga där variabeln som innehåller värdet på vår stapel ökar)

GLib.Timeout.add (500, () => {// Få aktuell förlopp: // (0.0 -> 0%; 1.0 -> 100%) dubbel förlopp = time_bar.get_fraction (); // Uppdatera fältet: progress = progress + 0.01; time_bar.set_fraction (progress); // Upprepa tills 100% returnera progress <1.0;});

Länkar av intresse 
http://www.valadoc.org/#!wiki=index (du kan hitta alla gtk-element med deras metoder ...)


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   lozanotux sade

    Mycket bra, jag kommer att fråga dig hur jag kan göra ett slags TABS men vertikalt, även om de inte nödvändigtvis behöver vara flikar, de kan vara knappar eller ToggleButtons, men jag behöver beteendet hos en flik, att när man rör 1 till dess innehåll ses och den andra fliken är inaktiverad, jag vet inte om jag förklarar mig själv, jag lämnar en bild för att se om du kan ge mig lite information att undersöka. Tack!

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

    1.    lolbimbo sade

      "Layouten" eller textändringen (till exempel)?

  2.   pandev92 sade

    Katalanska parla

  3.   bedövad sade

    Det här är väldigt bra, det är faktiskt något som liknar det jag letade efter, en fråga, kan den här frågan kopplas till terminalen på något sätt?
    Till exempel: Till att börja med tar jag mig tid att svara, jag låter det vara obegränsat och det skulle jag vilja göra.

    Vilken skrivbordsmiljö vill du installera?
    KDE
    Gnome 3
    Kanel
    Unity

    Och var och en av dessa som var kopplad till dess respektive installationskommando i terminalen, sudo apt-get install ubuntu-desktop

    1.    lolbimbo sade

      Ja, du skulle bara behöva skriva Process.spawn_command_line_async ("apt-get install ubuntu-desktop");

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

  4.   Saúl Uribe sade

    Utmärkt, jag gillar inlägget, jag kommer att öva (och jag ser fram emot det), hälsningar