Crearea unei aplicații (Vala + GTK 3) [a treia parte]

În această parte vom vedea cum să creăm o altă fereastră și să o proiectăm cu GTK. Vom vedea, de asemenea, unele funcționalități, cum ar fi adăugarea de întrebări și utilizarea celor trei butoane (50%, îngheț și trecere).

ToolBar și ToolButton

Creați o bară de instrumente:

aplicația 2

Crearea unui ToolButton, în acest caz vom pune o pictogramă (puteți găsi multe pictograme în mod implicit aici) cu «from_stock (Gtk.Stock.IconName):

Captură din 2013-12-07 23:26:52

Putem vedea că în aplicația noastră avem o bară cu două butoane în partea de sus, unde vom folosi primul pentru a crea întrebări noi și al doilea pentru a importa întrebări (printr-un fișier):

Captură din 2013-11-08 00:30:32

Crearea întrebărilor:
Butonul pe care l-am creat anterior (în bara de instrumente) când facem clic pe el, vom deschide o nouă fereastră gtk care ne va permite să adăugăm întrebări la baza noastră de date:

aplicația 1

Pentru a crea o fereastră nouă vom crea o nouă clasă, pe care o vom numi Întrebări, și modul în care clasa noastră de aplicații va crea o nouă fereastră (this.window = new Gtk.Window ();)

Vom folosi câteva componente pentru a crea interfața grafică în ordine;

-Label (Întrebări)

- Intrare (unde vom scrie întrebarea)

-Etichetă (răspunsuri)

- 4 casete orizontale care vor conține o intrare (răspunsul) și un comutator (pentru a selecta dacă este corect)

-Buton (pentru a finaliza)

Putem vedea cum arată:

Captură din 2013-12-08 01:07:08

Pentru a salva întrebarea va trebui să obținem textul intrărilor, acestea sunt obținute cu get_text () care returnează un șir.

aplicația 5

Pentru a ști dacă un Switch este activ putem folosi metoda sa get_active () care returnează adevărat dacă este activat și afișează dacă este dezactivat.

 50%, butoane Freeze și Pass:

 -50%:

Pentru 50% trebuie doar să ne uităm la care este butonul corect și să eliminăm 2 care nu sunt corecte, în acest caz le anulăm cu set_sensitive (false).

aplicația 4

rezultat:

aplicația 6

-Îngheţa:

Am setat din nou bara la 0.

this.time_bar.set_fraction (0);

-Trece:

button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});

 Partea următoare (4):

În următoarea tranșă vom vedea cum să îmbunătățim aspectele aplicației noastre, cum ar fi faptul că întrebările nu apar întotdeauna în aceeași poziție, punem o pictogramă aplicației ...


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   f3niX el a spus

    Îmi plac răspunsurile ... haha ​​.. Salutări

  2.   panchomora el a spus

    Foarte bine aceste articole despre vala .. Sper ca celelalte .. salutări

  3.   cr0t0 el a spus

    Am în așteptarea intrării dvs. pe Vala, sper să fie multe livrări. Noroc!

  4.   pptru el a spus

    Un articol frumos, mulțumesc pentru distribuire.

  5.   Hiram el a spus

    Buna,

    Am urmărit intrările dvs. anterioare pentru crearea acestei aplicații, problema vine acum că încerc să accesez intrările ferestrei noi, o fac în acest fel, în metoda saveC a clasei createQuestions (clasa care creează fereastra).

    public void saveC () {
    șir str = întrebareE.get_text ();
    stdout.printf ("Tratat% s \ n", str);
    }

    Dar la ieșire obțin acest lucru:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: aserțiunea „GTK_IS_ENTRY (intrare)” a eșuat

    Tratat (nul)

    Am văzut câteva exemple și în definiția metodelor care accesează intrările fac așa ceva:

    void on_activate (Gtk.Entry intrare) {
    nume = entry.get_text ();
    print ("\ nBuna ziua" + nume + "! \ n \ n");
    }

    Dar au doar o singură intrare și în acest exemplu sunt 5, așa că aici sunt deja pierdut, m-ai putea ghida mai bine.

    1.    lolbimbo el a spus

      Ei bine, când creați intrările, nu le dați același nume, pentru a obține textul pe care îl aveți, faceți:

      r1 = intrare1.get_text();
      r2 = intrare2.get_text();
      r3 = intrare3.get_text();
      r4 = intrare4.get_text();

      Dacă vreți, puneți un pastebin și mă uit la el

      1.    Hiram el a spus

        lolbimbo dacă de fapt le am cu nume diferite, dar folosesc doar unul pentru teste, deoarece niciunul dintre ele nu returnează textul pe care l-am pus în intrare, îmi trimite eroarea menționată mai sus:

        Dar la ieșire obțin acest lucru:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: aserțiunea „GTK_IS_ENTRY (intrare)” a eșuat

        Tratat (nul)

        Încă investigez ...

        Noroc.!!

      2.    Hiram el a spus

        Gata aici este sursa, salutări.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo el a spus

      Salut Hiram, uite, îți spun cum trebuie să o faci pentru a o rezolva, primul lucru este că creăm o fereastră nouă (nu este cea principală), iar la apelarea intrării, (îmi pare rău pentru cuvinte) nu știu de ce Acea rahat nu se întoarce ca și cum ar fi o intrare, ci un widget, dar hei, pentru a o rezolva trebuie doar să schimbați toate componentele statice pe care le-ați creat în dinamice folosind var:

      var questionE = new Gtk.Entry ();

      atunci funcția va funcționa și veți primi textul în interiorul intrării.

      save.clicked.connect (() => {
      // string str = this.questionE.get_text ();
      stdout.printf ("Tratat% s \ n", askE.get_text ());
      });

      În cele din urmă, nu uitați să schimbați linia în care adăugați intrarea pentru a o afișa:

      askE.show ();

      Vă las codul complet cu modificarea, astfel încât să puteți verifica dacă funcționează deja, adică dacă trebuie să modificați toate elementele (cel puțin intrările) pentru a continua cu aplicația.

      http://paste.desdelinux.net/5048

      În ceea ce priveşte

      1.    Hiram el a spus

        Chale, aici deranjează din nou, tot am probleme, codul pe care mi-l arăți este bine, doar ceva se întâmplă în eventualitatea:

        save.clicked.connect (() => {
        // string str = this.questionE.get_text ();
        stdout.printf ("Tratat% s \ n", askE.get_text ());
        });

        Se află în clasa Întrebări și funcționează bine, dar când doriți să intrați din saveC, nu compilează, îmi aruncă această eroare:

        bu01.vala: 50.38-50.50: eroare: Argument 1: Nu se poate converti de la „Questions.saveC” la „Gtk.Button.clicked”
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: avertisment: Gtk.Stock a fost depreciat de la 3.10
        bu01.vala: 260.59-260.67: avertisment: Gtk.Stock a fost depreciat de la 3.10
        Compilarea nu a reușit: 1 eroare, 2 avertisment (e)

        Vreau să cred că este din cauza modului în care trec parametrul atunci când apare evenimentul de clic:
        this.guardar.clicked.connect (this.guardarC);

        Vă mulțumim anticipat pentru feedback; aici las codul care aruncă eroarea: http://pastebin.com/pLzExhrb

      2.    lolbimbo el a spus

        Nu l-am testat, dar cred că eliminarea argumentului din funcție îl va arunca.

        public void saveC (Gtk.Entry askE) {
        șir str = întrebareE.get_text ();
        stdout.printf ("Tratat% s \ n", str);
        }

        a:
        public void saveC () {
        șir str = întrebareE.get_text ();
        stdout.printf ("Tratat% s \ n", str);
        }

      3.    Hiram el a spus

        lolbimbo, am încercat să elimin argumentul și încă nu funcționează,

        Încerc încă să înțeleg problema, sunt nou în Vala și nu găsesc multă documentație, sper să găsesc soluția în curând sau să aștept să eliberați a patra parte xD.

        Încerc în continuare ...

        Salutări.