След първа публикация Прочетох коментар, че би било по-добре да започна с нещо по-сложно от "здравей свят", след това ще направя последователност (Или 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;}
За преместване на "времето" използваме 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 елементи с техните методи ...)
Много добре, позволете ми да ви попитам как мога да направя един вид TABS, но вертикално, въпреки че не е задължително те да бъдат раздели, те могат да бъдат бутони или ToggleButtons, но имам нужда от поведението на раздела, че когато докосвам 1 неговото съдържание може да се види и другият раздел е деактивиран, не знам дали се обяснявам, оставям изображение, за да видя дали можете да ми дадете информация, която да разследвам. Благодаря ти!
ОБРАЗ: http://i.imm.io/1jURw.png
„Оформлението“ или промяната на текста (например)?
Каталунски парла
Това е много добре, всъщност е нещо подобно на това, което търсих, въпрос, може ли този въпрос да бъде свързан по някакъв начин с терминала?
Например: За да започна, отделям време за отговор, оставям го неограничен и това бих искал да направя.
Каква работна среда искате да инсталирате?
KDE
Gnome 3
Канела
Единство
И всеки от тях, който беше свързан със съответната команда за инсталиране в терминала, sudo apt-get install ubuntu-desktop
Да, просто ще трябва да напишете Process.spawn_command_line_async ("apt-get install ubuntu-desktop");
http://valadoc.org/#!api=glib-2.0/GLib.Process.spawn_command_line_sync
Отлично, харесвам публикацията, ще практикувам (и с нетърпение очаквам), поздрави