U ovom ćemo dijelu vidjeti kako stvoriti još jedan prozor i dizajnirati ga s GTK-om. Vidjet ćemo i neke funkcionalnosti poput dodavanja pitanja i korištenja tri gumba (50%, zamrzavanje i dodavanje).
ToolBar i ToolButton
Stvorite alatnu traku:
Stvaranjem gumba s alatima, u ovom ćemo slučaju staviti ikonu (prema zadanim postavkama možete pronaći mnoge ikone ovdje) s «from_stock (Gtk.Stock.IconName):
Vidimo da u našoj aplikaciji imamo traku s dva gumba na vrhu, gdje ćemo prvi koristiti za stvaranje novih pitanja, a drugi za uvoz pitanja (kroz datoteku):
Izrada pitanja:
Gumb koji smo prethodno stvorili (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 stvorili novi prozor, stvorit ć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 izradu grafičkog sučelja po redu;
-Oznaka (Pitanja)
- Unos (gdje ćemo napisati pitanje)
-Oznaka (odgovori)
- 4 vodoravna okvira koji će sadržavati Unos (odgovor) i Prekidač (za odabir je li toč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 je li prekidač aktivan, možemo koristiti njegovu metodu postati_aktivan () koja vraća true ako je uključena i flase ako je isključena.
50%, gumbi 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 otkazujemo ih s set_sensitive (false).
rezultat:
-Zamrznuti:
Ponovno smo postavili traku na 0.
this.time_bar.set_fraction (0);
-Proći:
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, stavite ikonu u aplikaciju ...
Volim odgovore ... haha .. Pozdrav
Jako dobri ovi članci o vali .. nadam se i ostalima .. pozdrav
Čekam vaš ulazak na Vala, nadam se da ima mnogo isporuka. Živjeli!
Lijep članak, hvala na dijeljenju.
Pozdrav,
Slijedio sam vaše prethodne unose za stvaranje ove aplikacije, problem dolazi sada kad pokušavam pristupiti unosima novog prozora, činim to na ovaj način, u metodi saveC klase createQuestions (klasa koja kreira prozor) .
public void saveC () {
niz 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 ovoga:
void on_activate (Unos Gtk.Entry) {
ime = unos.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, kad kreirate unose, ne dajete im isto ime, da biste dobili tekst koji imaju:
r1 = unos1.get_text ();
r2 = unos2.get_text ();
r3 = unos3.get_text ();
r4 = unos4.get_text ();
Ako želite, stavite pastebin i ja ću ga pogledati
lolbimbo ako ih zapravo imam s različitim imenima, ali koristim samo jedan za testove, jer niti jedan 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 to riješiš, prvo što se to dogodi jer stvaramo novi prozor (nije glavni), a kada pozivamo unos, ( oprostite na riječima) Ne znam zašto se to sranje ne vraća kao da je unos već Widget, ali hej, da biste ga riješili, jednostavno morate sve statičke komponente koje ste stvorili promijeniti u dinamičke pomoću var:
var questionE = novi Gtk.Entry ();
tada će funkcija raditi i primit ćete tekst unutar unosa.
save.clicked.connect (() => {
// niz str = this.questionE.get_text ();
stdout.printf ("Ugovor% s \ n", askE.get_text ());
});
I na kraju, ne zaboravite promijeniti redak u koji dodajete unos kako bi se prikazao:
askE.show ();
Ostavljam vam kompletan kod s izmjenama kako biste mogli provjeriti radi li već, odnosno ako morate promijeniti sve elemente (barem unose) da biste nastavili s aplikacijom.
http://paste.desdelinux.net/5048
pozdravi
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 (() => {
// niz str = this.questionE.get_text ();
stdout.printf ("Ugovor% s \ n", askE.get_text ());
});
Unutar je klase Pitanja i to je u redu, ali kada želite ući iz saveC-a, ne kompajlira se, već mi donosi ovu pogrešku:
bu01.vala: 50.38-50.50: pogreš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 upozorenja
Želim misliti da je to zbog načina na koji prosljeđujem parametar kada se dogodi klik:
this.guardar.clicked.connect (this.guardarC);
Unaprijed zahvaljujem na povratnim informacijama; ovdje ostavljam kôd koji baca pogrešku: http://pastebin.com/pLzExhrb
Nisam ga testirao, ali mislim da će ga uklanjanje argumenta iz funkcije baciti.
javna praznina saveC (Gtk.Entry pitaE) {
niz str = questionE.get_text ();
stdout.printf ("Ugovor% s \ n", str);
}
a:
public void saveC () {
niz str = questionE.get_text ();
stdout.printf ("Ugovor% s \ n", str);
}
lolbimbo, pokušao sam ukloniti argument i dalje ne uspijeva,
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.