Î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:
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):
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):
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:
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ă:
Pentru a salva întrebarea va trebui să obținem textul intrărilor, acestea sunt obținute cu get_text () care returnează un șir.
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).
rezultat:
-Î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 ...
Îmi plac răspunsurile ... haha .. Salutări
Foarte bine aceste articole despre vala .. Sper ca celelalte .. salutări
Am în așteptarea intrării dvs. pe Vala, sper să fie multe livrări. Noroc!
Un articol frumos, mulțumesc pentru distribuire.
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.
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
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.!!
Gata aici este sursa, salutări.
http://pastebin.com/pZG8GbrY
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
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
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);
}
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.