Ustvarjanje aplikacije Vala + Gtk3. [1. del]

Po tem prva objava Prebrala sem komentar, da bi bilo bolje začeti z nečim bolj zapletenim kot "živ svet", potem bom naredila zaporedje (Ali 3 4) objava ustvarjanja preproste aplikacije (z vala + gtk 3).

Aplikacija bo sestavljena iz preproste igre z več vprašanji in odgovori (vrsta Trivia), v kateri se na 3 vprašanja odgovori napačno (igra je končana), cilj pa je odgovoriti na čim več vprašanj, za vsako vprašanje pa imate omejen čas odgovor.

Oblikovanje

Glavna zasnova naše aplikacije bo:

aplikacija

Kasneje bomo postavili nekaj gumbov, ki nam bodo dali možnost 50% (odprava dveh napačnih odgovorov), zamrznili čas in podali vprašanje. Vse jih je mogoče uporabiti samo enkrat, pri uporabi pa so onemogočene.

Oblikovanje a Koda
Kot lahko vidimo pri oblikovanju, vidimo elemente gtk, ki jih bomo uporabili:

Odgovori -> Gumb.

Vprašanje -> Oznaka.

Čas -> ProgressBar.

Napačne / pravilne točke in vprašanja -> Oznaka.

Vidimo, da imamo navpično strukturo, zato lahko GBox uporabljamo navpično.

Koda

int main (string [] args) {Gtk.init (ref args); var okno = 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); // navpično polje var box = novo Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Oznaka za vprašanje var question = new Gtk.Label ("Vprašanje?"); // programska časovna vrstica var time_bar = new Gtk.ProgressBar (); time_bar.set_text ("Čas"); time_bar.set_show_text (true); // gumbi za odgovor var response1 = new Gtk.Button.with_label ("Response 1"); var resposta2 = novo Gtk.Button.with_label ("Odgovori 2"); var resposta3 = novo Gtk.Button.with_label ("Odgovori 3"); var resposta4 = novo Gtk.Button.with_label ("Odgovori 4"); // označuje info var points = new Gtk.Label ("Točke: 0"); box.pack_start (vprašanje); box.pack_start (time_bar); box.pack_start (odgovor1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (točke); window.add (polje); window.show_all (); Gtk.main (); vrni 0;}

Zajem iz 2013-11-02 21:44:14

Za premik "časa" uporabimo GLib.Timeout, kjer se bo vsakih 500 milisekund aktiviral (to je zanka, kjer se bo spremenljivka, ki vsebuje vrednost naše vrstice, povečala)

GLib.Timeout.add (500, () => {// Pridobite trenutni napredek: // (0.0 -> 0%; 1.0 -> 100%) double progress = time_bar.get_fraction (); // Posodobite vrstico: napredek = napredek + 0.01; time_bar.set_fraction (napredek); // ponavljamo do 100% vrnitve napredovanja <1.0;});

Zanimive povezave 
http://www.valadoc.org/#!wiki=index (vse elemente gtk lahko najdete z njihovimi metodami ...)


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   lozanotux je dejal

    Zelo dobro, vprašal vas bom, kako lahko naredim nekakšne zavihke, toda navpično, čeprav ni nujno, da so to zavihki, lahko so to gumbi ali gumbi ToggleButtons, vendar potrebujem vedenje zavihka, ki pri dotiku 1 njegove vsebine je viden in drugi zavihek je onemogočen, ne vem, če se razložim, pustim sliko, da vidim, če mi lahko daš nekaj informacij za preiskavo. Hvala vam!

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

    1.    lolbimbo je dejal

      «Postavitev» ali sprememba besedila (na primer)?

  2.   pandev92 je dejal

    Katalonski parla

  3.   osuplo je dejal

    To je zelo dobro, pravzaprav gre za nekaj podobnega tistemu, kar sem iskal, vprašanje, ali bi bilo to vprašanje mogoče na kakršen koli način povezati s terminalom?
    Na primer: Za začetek si vzamem čas za odgovor, pustim ga neomejenega in to bi bilo tisto, kar bi rad počel.

    Katero namizno okolje želite namestiti?
    KDE
    Gnome 3
    Cimet
    Unity

    In vsaka od teh, ki je bila povezana s svojim namestitvenim ukazom v terminalu, sudo apt-get install ubuntu-desktop

    1.    lolbimbo je dejal

      Da, preprosto bi morali napisati 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 je dejal

    Odlično, objava mi je všeč, vadila bom (in se je veselim), lep pozdrav