Een Vala + Gtk3-app maken. [1e deel]

na de eerste bericht Ik las een opmerking dat het beter zou zijn om te beginnen met iets complexers dan een "hallo wereld", dus ik zal een reeks doen (O 3 4) van na het maken van een eenvoudige applicatie (met vala + gtk 3).

De applicatie zal bestaan ​​uit een eenvoudig vraag-en-antwoordspel van het testtype (type Triviados), waarbij het eindigen als je drie vragen verkeerd beantwoordt (game over), en het doel is om voor elke vraag die je hebt zoveel mogelijk vragen te beantwoorden. een beperkte tijd om te reageren.

ontwerp

Het hoofdontwerp van onze applicatie zal zijn:

gebruiken

Later zullen we een aantal knoppen plaatsen die ons de optie geven van 50% (waarbij twee foute antwoorden worden geëlimineerd), de tijd bevriezen, een vraag doorgeven. Ze kunnen allemaal maar één keer worden gebruikt en worden uitgeschakeld zodra ze zijn gebruikt.

Ontwerp een Code
Zoals we in het ontwerp kunnen zien, kunnen we de gtk-elementen zien die we zullen gebruiken:

Antwoorden -> Knop.

Vraag -> Label.

Tijd -> ProgressBar.

Verkeerde / juiste punten en vragen -> Label.

We kunnen zien dat we een verticale structuur hebben en daarom kunnen we GBox verticaal gebruiken.

Code

int main (string [] args) {Gtk.init (ref args); var window = nieuwe 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); // verticale box var box = nieuwe Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Label voor de vraag var vraag = nieuw Gtk.Label ("Vraag?"); // prograsive time bar var time_bar = nieuwe Gtk.ProgressBar (); time_bar.set_text ("Tijd"); time_bar.set_show_text (true); // Reactieknoppen var response1 = new Gtk.Button.with_label ("Response 1"); var resposta2 = nieuwe Gtk.Button.with_label ("Antwoord 2"); var resposta3 = nieuwe Gtk.Button.with_label ("Antwoord 3"); var resposta4 = nieuwe Gtk.Button.with_label ("Antwoord 4"); // labels info var points = new Gtk.Label ("Points: 0"); box.pack_start (vraag); box.pack_start (time_bar); box.pack_start (antwoord1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (punten); window.add (vak); window.show_all (); Gtk.main (); retourneer 0;}

Leg vast van 2013-11-02 21:44:14

Om de "tijd" te verplaatsen gebruiken we GLib.Timeout waarbij deze elke 500 milliseconden wordt geactiveerd (het is een lus waarin de variabele die de waarde van onze balk bevat, wordt verhoogd)

GLib.Timeout.add (500, () => {// Haal de huidige voortgang op: // (0.0 -> 0%; 1.0 -> 100%) dubbele voortgang = time_bar.get_fraction (); // Update de balk: voortgang = voortgang + 0.01; time_bar.set_fraction (voortgang); // Herhaal totdat 100% de voortgang < 1.0 retourneert; });

Interessante links 
http://www.valadoc.org/#!wiki=index (je kunt alle gtk-elementen vinden met hun methoden…)


6 reacties, laat de jouwe achter

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   loszanotux zei

    Heel goed, ik zal je vragen hoe ik een soort TABS kan maken, maar verticaal, hoewel het niet per se tabs hoeven te zijn, het kunnen knoppen of ToggleButtons zijn, maar ik heb het gedrag van een tab nodig, dat bij het aanraken van 1 de inhoud ervan en het andere tabblad is uitgeschakeld, ik weet niet of ik het mezelf uitleg, ik laat een afbeelding achter om te zien of je me wat informatie kunt geven om te onderzoeken. Dank je!

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

    1.    lolbimbo zei

      De "layout" of de tekst veranderen (bijvoorbeeld)?

  2.   pandev92 zei

    Catalaans parla

  3.   stomverbaasd zei

    Dit is heel goed, sterker nog, het is iets dat lijkt op wat ik zocht, een vraag: kan deze vraag op de een of andere manier aan de terminal worden gekoppeld?
    Bijvoorbeeld: om te beginnen verwijder ik de tijd om te antwoorden, ik laat deze onbeperkt en dat zou ik graag willen doen.

    Welke desktopomgeving wil je installeren?
    KDE
    Gnome 3
    Kaneel
    Eenheid

    En elk van deze was gekoppeld aan het respectievelijke installatiecommando in de terminal, sudo apt-get install ubuntu-desktop

    1.    lolbimbo zei

      Ja, u hoeft alleen maar Process.spawn_command_line_async te schrijven ("apt-get install ubuntu-desktop");

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

  4.   Saúl Uribe zei

    Uitstekend, ik vond de post leuk, ik ga oefenen (en ik hoop voorop te lopen), groeten