Създаване на приложение Vala + Gtk3. [1-ва част]

След първа публикация Прочетох коментар, че би било по-добре да започна с нещо по-сложно от "здравей свят", след това ще направя последователност (Или 3 4) пост създаване на просто приложение (с vala + gtk 3).

Приложението ще се състои от проста игра с въпроси и отговори с многократен избор (тип Trivia), в която отговорите на 3 въпроса грешно завършват (играта приключва) и целта е да отговорите на възможно най-много въпроси, за всеки въпрос, който имате ограничено време за отговор.

Дизайн

Основният дизайн на нашето приложение ще бъде:

ап

По-късно ще сложим някои бутони, които ще ни дадат възможност за 50% (премахване на два грешни отговора), замразяване на времето, предаване на въпрос. Всички те могат да се използват само веднъж, като се деактивират веднъж.

Дизайн a Код
Както можем да видим в дизайна, можем да видим gtk елементите, които ще използваме:

Отговори -> Бутон.

Въпрос -> Етикет.

Време -> ProgressBar.

Грешни / правилни точки и въпроси -> Етикет.

Виждаме, че имаме вертикална структура, следователно можем да използваме GBox вертикално.

Код

int main (string [] args) {Gtk.init (ref args); var прозорец = нов Gtk.Window (); window.title = "приложение"; window.window_position = Gtk.WindowPosition.CENTER; window.set_default_size (300, 340); window.destroy.connect (Gtk.main_quit); window.set_border_width (10); // вертикална кутия var box = нов Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Етикет за въпроса var question = new Gtk.Label ("Въпрос?"); // лента за времева програма var time_bar = new Gtk.ProgressBar (); timebar.set_text ("Време"); time_bar.set_show_text (вярно); // Бутони за отговор var response1 = new Gtk.Button.with_label ("Response 1"); var resposta2 = new Gtk.Button.with_label ("Отговор 2"); var resposta3 = new Gtk.Button.with_label ("Отговор 3"); var resposta4 = new Gtk.Button.with_label ("Отговор 4"); // етикетира информация var точки = нов Gtk.Label ("Точки: 0"); box.pack_start (въпрос); box.pack_start (time_bar); box.pack_start (reply1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (точки); window.add (кутия); window.show_all (); Gtk.main (); връщане 0;}

Заснемане от 2013-11-02 21:44:14

За преместване на "времето" използваме GLib.Timeout, където на всеки 500 милисекунди ще се активира (това е цикъл, при който променливата, която съдържа стойността на нашата лента, ще се увеличи)

GLib.Timeout.add (500, () => {// Вземете текущия напредък: // (0.0 -> 0%; 1.0 -> 100%) double progress = time_bar.get_fraction (); // Актуализирайте лентата: progress = progress + 0.01; time_bar.set_fraction (progress); // Повтаряме до 100% връщане на напредъка <1.0;});

Интересни връзки 
http://www.valadoc.org/#!wiki=index (можете да намерите всички gtk елементи с техните методи ...)


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   лозанотукс каза той

    Много добре, позволете ми да ви попитам как мога да направя един вид TABS, но вертикално, въпреки че не е задължително те да бъдат раздели, те могат да бъдат бутони или ToggleButtons, но имам нужда от поведението на раздела, че когато докосвам 1 неговото съдържание може да се види и другият раздел е деактивиран, не знам дали се обяснявам, оставям изображение, за да видя дали можете да ми дадете информация, която да разследвам. Благодаря ти!

    ОБРАЗ: http://i.imm.io/1jURw.png

    1.    лолбимбо каза той

      „Оформлението“ или промяната на текста (например)?

  2.   pandev92 каза той

    Каталунски парла

  3.   зашеметен каза той

    Това е много добре, всъщност е нещо подобно на това, което търсих, въпрос, може ли този въпрос да бъде свързан по някакъв начин с терминала?
    Например: За да започна, отделям време за отговор, оставям го неограничен и това бих искал да направя.

    Каква работна среда искате да инсталирате?
    KDE
    Gnome 3
    Канела
    Единство

    И всеки от тях, който беше свързан със съответната команда за инсталиране в терминала, sudo apt-get install ubuntu-desktop

    1.    лолбимбо каза той

      Да, просто ще трябва да напишете Process.spawn_command_line_async ("apt-get install ubuntu-desktop");

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

  4.   Саул Урибе каза той

    Отлично, харесвам публикацията, ще практикувам (и с нетърпение очаквам), поздрави