Vytváření aplikace Vala + Gtk3. [1. část]

Po první příspěvek Přečetl jsem si komentář, že by bylo lepší začít s něčím komplexnějším než s „ahoj světem“, pak udělám sekvenci (3 o 4) příspěvek vytvářející jednoduchou aplikaci (s vala + gtk 3).

Aplikace se bude skládat z jednoduché hry s otázkami a odpověďmi s výběrem odpovědí (typ Trivia), ve které špatně končí zodpovězení 3 otázek (konec hry) a cílem je zodpovědět co nejvíce otázek, na každou otázku máte omezený čas na odpověď.

Design

Hlavní design naší aplikace bude:

aplikace

Později dáme některá tlačítka, která nám dají možnost 50% (vyloučení dvou nesprávných odpovědí), pozastavení času, předání otázky. Všechny z nich lze použít pouze jednou, při použití se deaktivují.

Design a Kód
Jak vidíme v designu, můžeme vidět prvky gtk, které budeme používat:

Odpovědi -> Tlačítko.

Otázka -> Štítek.

Čas -> ProgressBar.

Špatné / správné body a otázky -> Štítek.

Vidíme, že máme svislou strukturu, takže můžeme použít GBox svisle.

Kód

int main (string [] args) {Gtk.init (ref args); var okno = nový Gtk.Window (); window.title = "aplikace"; window.window_position = Gtk.WindowPosition.CENTER; window.set_default_size (300, 340); window.destroy.connect (Gtk.main_quit); window.set_border_width (10); // vertikální rámeček var box = nový Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Štítek pro otázku var question = new Gtk.Label ("Question?"); // lišta časového programu var time_bar = nový Gtk.ProgressBar (); timebar.set_text ("Čas"); time_bar.set_show_text (true); // Tlačítka odpovědí var response1 = new Gtk.Button.with_label ("Response 1"); var resposta2 = nový Gtk.Button.with_label ("Odpověď 2"); var resposta3 = nový Gtk.Button.with_label ("Odpověď 3"); var resposta4 = nový Gtk.Button.with_label ("Odpověď 4"); // štítky info var points = new Gtk.Label ("Points: 0"); box.pack_start (otázka); box.pack_start (time_bar); box.pack_start (odpověď1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (body); window.add (rámeček); window.show_all (); Gtk.main (); návrat 0;}

Zachytit od 2013-11-02 21:44:14

K posunutí „času“ používáme GLib.Timeout, kde se každých 500 milisekund aktivuje (jedná se o smyčku, kde se bude zvětšovat proměnná obsahující hodnotu naší lišty)

GLib.Timeout.add (500, () => {// Získat aktuální postup: // (0.0 -> 0%; 1.0 -> 100%) double progress = time_bar.get_fraction (); // Aktualizovat lištu: pokrok = pokrok + 0.01; time_bar.set_fraction (pokrok); // Opakujte, dokud 100% návrat pokrok <1.0;});

Zajímavé odkazy 
http://www.valadoc.org/#!wiki=index (najdete všechny prvky gtk s jejich metodami ...)


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   lozanotux řekl

    Velmi dobře, zeptám se vás, jak mohu udělat druh TABS, ale svisle, i když to nemusí nutně být karty, mohou to být tlačítka nebo ToggleButtons, ale potřebuji chování karty, že když se dotknete 1, je vidět její obsah a Druhá karta je deaktivována, nevím, jestli vysvětlím sám sebe, nechám obrázek, abych zjistil, zda mi můžete poskytnout nějaké informace k prošetření. Děkuji!

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

    1.    lolbimbo řekl

      „Rozvržení“ nebo změna textu (například)?

  2.   pandev92 řekl

    Katalánština parla

  3.   omráčený řekl

    To je velmi dobré, ve skutečnosti je to něco podobného tomu, co jsem hledal, otázka, mohla by být tato otázka nějakým způsobem spojena s terminálem?
    Například: Nejprve si udělám čas na odpověď, nechám to neomezeně a to by bylo to, co bych chtěl udělat.

    Jaké desktopové prostředí chcete nainstalovat?
    KDE
    Gnome 3
    Cinnamon
    Jednota

    A každý z nich, který byl propojen s příslušným instalačním příkazem v terminálu, sudo apt-get install ubuntu-desktop

    1.    lolbimbo řekl

      Ano, stačí napsat 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 řekl

    Výborně, příspěvek se mi líbí, budu cvičit (a vidím, že se dostanu dopředu), pozdravy