Tworzenie aplikacji Vala + Gtk3. [Pierwsza część]

Po pierwszy post Przeczytałem komentarz, że lepiej byłoby zacząć od czegoś bardziej złożonego niż „witaj świecie”, wtedy zrobię sekwencję (Lub 3 4) post tworząc prostą aplikację (z vala + gtk 3).

Aplikacja będzie składać się z prostej gry pytań i odpowiedzi wielokrotnego wyboru (typu Ciekawostki), w której udzielenie odpowiedzi na 3 pytania kończy się błędnie (koniec gry), a celem jest udzielenie odpowiedzi na jak największą liczbę pytań, na każde pytanie masz ograniczony czas odpowiedzieć.

Konstrukcja

Głównym projektem naszej aplikacji będzie:

Aplikacja

Później wstawimy kilka przycisków, które dadzą nam opcję 50% (eliminując dwie błędne odpowiedzi), zatrzymaj czas, zadaj pytanie. Wszystkie z nich mogą być użyte tylko raz, po ich użyciu są wyłączone.

Projekt a Kod
Jak widać w projekcie widzimy elementy gtk, których będziemy używać:

Odpowiedzi -> Przycisk.

Pytanie -> Etykieta.

Czas -> ProgressBar.

Niewłaściwe / prawidłowe punkty i pytania -> Etykieta.

Widzimy, że mamy strukturę pionową, dlatego możemy używać GBox w pionie.

Kod

int main (string [] args) {Gtk.init (ref args); var window = nowe Gtk.Window (); window.title = "aplikacja"; window.window_position = Gtk.WindowPosition.CENTER; window.set_default_size (300, 340); window.destroy.connect (Gtk.main_quit); window.set_border_width (10); // pionowe pudełko var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Etykieta dla pytania var question = new Gtk.Label ("Pytanie?"); // pasek programu czasowego var time_bar = new Gtk.ProgressBar (); timebar.set_text ("Czas"); time_bar.set_show_text (true); // Przyciski odpowiedzi var response1 = new Gtk.Button.with_label ("Odpowiedź 1"); var resposta2 = nowy Gtk.Button.with_label ("Odpowiedz 2"); var resposta3 = nowy Gtk.Button.with_label ("Odpowiedz 3"); var resposta4 = nowy Gtk.Button.with_label ("Odpowiedz 4"); // etykiety informacji var points = new Gtk.Label ("Points: 0"); box.pack_start (pytanie); box.pack_start (pasek_czasu); box.pack_start (odpowiedź1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (punkty); window.add (box); window.show_all (); Gtk.main (); return 0;}

Przechwytywanie z 2013 11:02:21

Do przesunięcia "czasu" używamy GLib.Timeout, gdzie co 500 milisekund będzie on aktywowany (jest to pętla, w której zmienna zawierająca wartość naszego słupka będzie rosła)

GLib.Timeout.add (500, () => {// Pobierz aktualny postęp: // (0.0 -> 0%; 1.0 -> 100%) double progress = time_bar.get_fraction (); // Zaktualizuj pasek: postęp = postęp + 0.01; time_bar.set_fraction (postęp); // Powtarzaj do 100% zwrotu postępu <1.0;});

Interesujące linki 
http://www.valadoc.org/#!wiki=index (możesz znaleźć wszystkie elementy gtk z ich metodami ...)


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   lozanotuks powiedział

    Bardzo dobrze, spytam jak mogę zrobić coś w rodzaju TABSÓW ale w pionie chociaż niekoniecznie muszą to być zakładki, mogą to być przyciski lub ToggleButtons, ale potrzebuję zachowania zakładki, która po dotknięciu 1 jej zawartości jest widoczny, a druga zakładka jest wyłączona, nie wiem, czy się wytłumaczę, zostawiam obraz, aby zobaczyć, czy możesz podać mi informacje do zbadania. Dziękuję Ci!

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

    1.    lolbimbo powiedział

      „Układ” czy zmiana tekstu (na przykład)?

  2.   pandev92 powiedział

    Kataloński parla

  3.   oszołomiony powiedział

    To jest bardzo dobre, w rzeczywistości jest to coś podobnego do tego, czego szukałem, pytanie, czy to pytanie może być w jakikolwiek sposób powiązane z terminalem?
    Na przykład: Na początek poświęcam trochę czasu na odpowiedź, zostawiam to w nieograniczonym zakresie i to właśnie chciałbym zrobić.

    Jakie środowisko graficzne chcesz zainstalować?
    KDE
    Gnome 3
    Cynamon
    jedność

    I każdy z nich, który był powiązany z odpowiednim poleceniem instalacji w terminalu, sudo apt-get install ubuntu-desktop

    1.    lolbimbo powiedział

      Tak, wystarczyłoby napisać Process.spawn_command_line_async ("apt-get install ubuntu-desktop");

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

  4.   Saula Uribe powiedział

    Świetnie, post mi się podoba, będę ćwiczyć (i doczepię się), pozdrawiam