U ovom dijelu vidjet ćemo kako stvoriti još jedan prozor i dizajnirati ga sa GTK. Vidjet ćemo i neke funkcionalnosti poput dodavanja pitanja i korištenja tri tipke (50%, zamrzavanje i dodavanje).
ToolBar i ToolButton
Kreirajte traku s alatima:
Stvaranjem gumba s alatima, u ovom ćemo slučaju staviti ikonu (prema zadanim postavkama možete pronaći mnoge ikone ovdje) sa «from_stock (Gtk.Stock.IconName):
Vidimo da u našoj aplikaciji imamo traku s dva gumba na vrhu, gdje ćemo prvo koristiti za stvaranje novih pitanja, a drugo za uvoz pitanja (kroz datoteku):
Stvaranje pitanja:
Dugme koje smo prethodno kreirali (na alatnoj traci) kada kliknemo na njega, otvorit ćemo novi gtk prozor koji će nam omogućiti dodavanje pitanja u našu bazu podataka:
Da bismo kreirali novi prozor, kreiraćemo novu klasu, koju ćemo nazvati Pitanja, i kako će naša klasa App stvoriti novi prozor (this.window = new Gtk.Window ();)
Upotrijebit ćemo nekoliko komponenata za kreiranje grafičkog sučelja po redu;
-Label (Pitanja)
- Unos (gdje ćemo napisati pitanje)
-Oznaka (odgovori)
- 4 horizontalna polja koja će sadržavati unos (odgovor) i prekidač (da biste izabrali da li je tačan)
-Gumb (za dovršetak)
Možemo vidjeti kako to izgleda:
Da bismo spremili pitanje, morat ćemo dobiti tekst unosa, oni se dobivaju pomoću get_text () koji vraća niz.
Da bismo znali da li je komutator aktivan, možemo koristiti njegovu metodu get_active () koji vraća true ako je uključen i flase ako je isključen.
50%, tipke za zamrzavanje i dodavanje:
-pedeset%:
Za 50% moramo samo pogledati koji je točan gumb i ukloniti 2 koja nisu točna, u ovom slučaju ih otkazujemo s set_sensitive (false).
Rezultat:
-Friz:
Ponovo smo postavili traku na 0.
this.time_bar.set_fraction (0);
-Pass:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Sljedeći dio (4):
U sljedećem dijelu vidjet ćemo kako poboljšati aspekte naše aplikacije, na primjer da se pitanja ne pojavljuju uvijek na istom položaju, stavimo ikonu u aplikaciju ...
Volim odgovore ... haha .. Pozdrav
Vrlo dobri ovi članci o vali .. nadam se i ostalima .. pozdrav
Čekam vaš ulazak na Vala, nadam se da ima mnogo isporuka. Pozdrav!
Lijep članak, hvala na dijeljenju.
zdravo,
Slijedio sam vaše prethodne unose za stvaranje ove aplikacije, problem dolazi sada kada pokušavam pristupiti unosima novog prozora, činim to na ovaj način, u metodi saveC klase createQuestions (klasa koja kreira prozor) .
javna void saveC () {
string str = questionE.get_text ();
stdout.printf ("Ugovor% s \ n", str);
}
Ali na izlazu dobivam ovo:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: tvrdnja `GTK_IS_ENTRY (unos) 'nije uspjela
Ugovor (null)
Vidio sam nekoliko primjera i u definiciji metoda koje pristupaju unosima čine nešto poput ovog:
void on_activate (Gtk.Entry unos) {
name = entry.get_text();
ispis ("\ nPozdrav" + ime + "! \ n \ n");
}
Ali oni imaju samo jedan unos, a u ovom primjeru ih je 5, tako da sam se ovdje već izgubio, mogli biste me bolje voditi.
Pa, kada kreirate unose ne dajete im isto ime, da biste dobili tekst koji imaju:
r1 = entry1.get_text();
r2 = entry2.get_text();
r3 = entry3.get_text();
r4 = entry4.get_text();
Ako želite, stavite pastebin i ja ću ga pogledati
lolbimbo ako ih zapravo imam s različitim imenima, ali koristim samo jedno za testove, jer niko od njih ne vraća tekst koji sam stavio u unos, šalje mi gore spomenutu grešku:
Ali na izlazu dobivam ovo:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: tvrdnja `GTK_IS_ENTRY (unos) 'nije uspjela
Ugovor (null)
Još istražujem ...
Živjeli. !!
Spreman je izvor, pozdrav.
http://pastebin.com/pZG8GbrY
Bok Hiram, slušaj, reći ću ti kako to moraš učiniti da ga riješiš, prva stvar je da kreiramo novi prozor (nije glavni), a kada pozivamo unos, (izvini na riječi) Ne znam zašto se to sranje ne vraća kao da je unos već Widget, ali hej, da biste ga riješili, samo morate promijeniti sve statičke komponente koje ste kreirali u dinamičke pomoću var:
var questionE = new Gtk.Entry ();
tada će funkcija raditi i primit ćete tekst unutar unosa.
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Ugovor% s \ n", askE.get_text ());
});
I na kraju, ne zaboravite promijeniti redak u koji ste dodali unos kako bi se prikazao:
askE.show ();
Ostavljam vam kompletan kod s izmjenom kako biste mogli provjeriti da li već radi, odnosno ako morate promijeniti sve elemente (barem unose) da biste nastavili s aplikacijom.
http://paste.desdelinux.net/5048
Saludos
Chale, ovdje se opet mučim, i dalje imam problema, kod koji mi pokažeš je u redu, samo se nešto dogodi u slučaju:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Ugovor% s \ n", askE.get_text ());
});
Nalazi se unutar klase Pitanja i radi u redu, ali kada želi ući iz saveC-a, ne kompajlira se, već mi donosi ovu grešku:
bu01.vala: 50.38-50.50: greška: Argument 1: Nije moguće pretvoriti iz `questions.saveC 'u` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: upozorenje: Gtk.Stock je zastario od 3.10
bu01.vala: 260.59-260.67: upozorenje: Gtk.Stock je zastario od 3.10
Kompilacija nije uspjela: 1 pogreška, 2 upozorenje
Želim misliti da je to zbog načina na koji prosljeđujem parametar kada se dogodi klik:
this.guardar.clicked.connect (this.guardarC);
Unaprijed se zahvaljujem na povratnim informacijama; ovdje ostavljam kod koji baca grešku: http://pastebin.com/pLzExhrb
Nisam ga testirao, ali mislim da će ga uklanjanje argumenta iz funkcije baciti.
javna praznina saveC (Gtk.Entry pitaE) {
string str = questionE.get_text ();
stdout.printf ("Ugovor% s \ n", str);
}
a:
javna void saveC () {
string str = questionE.get_text ();
stdout.printf ("Ugovor% s \ n", str);
}
lolbimbo, pokušao sam ukloniti argument, ali on i dalje ne funkcionira,
Još uvijek pokušavam razumjeti problem, novi sam u Vali i ne mogu naći puno dokumentacije, nadam se da ću uskoro pronaći rješenje ili pričekati da objavite četvrti dio xD.
Pokušavam i dalje ...
Pozdrav.