V tem delu bomo videli, kako ustvariti novo okno in ga oblikovati z GTK. Videli bomo tudi nekatere funkcionalnosti, na primer dodajanje vprašanj in uporabo treh gumbov (50%, zamrznitev in podaja).
ToolBar in ToolButton
Ustvari orodno vrstico:
Ustvarimo ToolButton, v tem primeru bomo postavili ikono (privzeto lahko najdete veliko ikon tukaj) z «from_stock (Gtk.Stock.IconName):
Vidimo lahko, da imamo v naši aplikaciji vrstico z dvema gumboma na vrhu, kjer bomo s prvim ustvarili nova vprašanja, z drugim pa za uvoz vprašanj (prek datoteke):
Ustvarjanje vprašanj:
Gumb, ki smo ga prej ustvarili (v orodni vrstici), ko ga kliknemo, bo odprl novo okno gtk, ki nam bo omogočilo dodajanje vprašanj v našo bazo podatkov:
Če želite ustvariti novo okno, bomo ustvarili nov razred, ki ga bomo imenovali Vprašanja, in kako bo naš razred aplikacij ustvaril novo okno (this.window = new Gtk.Window ();)
Za izdelavo grafičnega vmesnika bomo uporabili nekaj komponent po vrstnem redu;
-Nalepka (vprašanja)
- Vnos (kjer bomo napisali vprašanje)
-Etiketa (odgovori)
- 4 vodoravna polja, ki bodo vsebovala vnos (odgovor) in stikalo (če želite izbrati, ali je pravilen)
-Gumb (za dokončanje)
Vidimo lahko, kako izgleda:
Če želite shraniti vprašanje, bomo morali dobiti besedilo vnosov, dobimo jih z get_text (), ki vrne niz.
Če želimo vedeti, ali je stikalo aktivno, lahko uporabimo njegovo metodo get_active (), ki vrne true, če je vklopljeno, in flase, če je izklopljeno.
50%, gumbi Freeze in Pass:
-petdeset%:
Za 50% moramo samo pogledati, kateri je pravi gumb in odstraniti 2, ki nista pravilna, v tem primeru jih prekličemo s set_sensitive (false).
Rezultat:
- Zamrznitev:
Vrstico smo ponovno nastavili na 0.
this.time_bar.set_fraction (0);
-Podhod:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Naslednji del (4):
V naslednjem delu bomo videli, kako izboljšati vidike naše aplikacije, na primer, da se vprašanja ne prikažejo vedno v istem položaju, da aplikaciji damo ikono ...
Obožujem odgovore ... haha .. Lep pozdrav
Ti članki o vali so zelo dobri .. upam, da ostali .. lep pozdrav
Čakam na vaš vstop na Valo, upam, da bo veliko pošiljk. Na zdravje!
Lep članek, hvala za delitev.
Pozdravljeni,
Sledil sem vašim prejšnjim vnosom za ustvarjanje te aplikacije, težava pa se pojavi zdaj, ko poskušam dostopati do vnosov novega okna, to naredim na ta način v metodi saveC razreda createQuestions (razred, ki ustvari okno).
public void saveC () {
niz str = questionE.get_text ();
stdout.printf ("Pogodba% s \ n", str);
}
Toda na izhodu dobim to:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: trditev `GTK_IS_ENTRY (vnos) 'ni uspela
Pogodba (nična)
Videl sem nekaj primerov in v definiciji metod, ki dostopajo do vnosov, naredijo nekaj takega:
void on_activate (vnos Gtk.Entry) {
ime = vnos.get_text ();
print ("\ nPozdravljeni" + ime + "! \ n \ n");
}
Imajo pa samo en vnos in v tem primeru jih je 5, zato sem že izgubljen, lahko bi me bolje vodili.
No, ko ustvarite vnose, jim ne daste istega imena, če želite dobiti besedilo, ki ga imajo:
r1 = vnos1.get_text ();
r2 = vnos2.get_text ();
r3 = vnos3.get_text ();
r4 = vnos4.get_text ();
Če želite, dajte pastebin in ga bom pogledal
lolbimbo, če jih imam v resnici z različnimi imeni, za preizkuse pa uporabljam samo enega, ker nobeden od njih ne vrne besedila, ki sem ga dal v vnos, mi pošlje zgoraj omenjeno napako:
Toda na izhodu dobim to:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: trditev `GTK_IS_ENTRY (vnos) 'ni uspela
Pogodba (nična)
Še vedno preiskujem ...
Na zdravje.!!
Tukaj je vir, lep pozdrav.
http://pastebin.com/pZG8GbrY
Živjo, Hiram, poglej, povedal ti bom, kako to storiti, da ga rešiš. Prva stvar je, da ustvarjamo novo okno (ki ni glavno) in med klicem vnosa (oprosti za besede) ne vem zakaj To sranje se ne vrne, kot da bi šlo za vnos, ampak za pripomoček, ampak hej, če ga želite rešiti, morate spremeniti vse statične komponente, ki ste jih ustvarili, v dinamične z uporabo var:
var questionE = new Gtk.Entry ();
potem bo funkcija delovala in prejeli boste besedilo znotraj vnosa.
save.clicked.connect (() => {
// niz str = this.questionE.get_text ();
stdout.printf ("Pogodba% s \ n", vprašajE.get_text ());
});
Na koncu ne pozabite spremeniti vrstice, kjer dodate vnos, da se prikaže:
askE.show ();
Celotno kodo vam pustim s spremembo, tako da lahko preverite, ali že deluje, torej če morate za nadaljevanje z aplikacijo spremeniti vse elemente (vsaj vnose).
http://paste.desdelinux.net/5048
pozdrav
Chale, tukaj spet moti, imam težave, koda, ki mi jo pokažeš, je v redu, le nekaj se zgodi v primeru:
save.clicked.connect (() => {
// niz str = this.questionE.get_text ();
stdout.printf ("Pogodba% s \ n", vprašajE.get_text ());
});
Je v razredu Vprašanja in deluje v redu, toda ko hočete vstopiti iz saveC, se ne prevede, vrže mi to napako:
bu01.vala: 50.38-50.50: napaka: Argument 1: Pretvorbe iz `questions.saveC 'ni mogoče pretvoriti v` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: opozorilo: Gtk.Stock je zastarel od 3.10
bu01.vala: 260.59-260.67: opozorilo: Gtk.Stock je zastarel od 3.10
Prevajanje ni uspelo: 1 napaka (e), 2 opozorilo (i)
Mislim, da je to zaradi načina, kako posredujem parameter, ko pride do dogodka klik:
this.guardar.clicked.connect (this.guardarC);
Vnaprej hvala za povratne informacije; tu pustim kodo, ki vrže napako: http://pastebin.com/pLzExhrb
Nisem poskusil, vendar mislim, da ga bo odstranjevanje argumenta iz funkcije zavrglo.
public void saveC (Gtk.Entry vprašaE) {
niz str = questionE.get_text ();
stdout.printf ("Pogodba% s \ n", str);
}
a:
public void saveC () {
niz str = questionE.get_text ();
stdout.printf ("Pogodba% s \ n", str);
}
lolbimbo, poskusil sem odstraniti argument in še vedno ne deluje,
Še vedno poskušam razumeti težavo, v Vali sem nov in ne najdem veliko dokumentacije, upam, da bom kmalu našel rešitev ali čakal, da boste izdali četrti del xD.
Še naprej poskušam ...
Lep pozdrav.