Šioje dalyje pamatysime, kaip sukurti kitą langą ir suprojektuoti jį naudojant GTK. Taip pat pamatysime keletą funkcijų, pavyzdžiui, klausimų pridėjimą ir trijų mygtukų naudojimą (50%, užšaldymas ir perdavimas).
Įrankių juosta ir įrankių mygtukas
Sukurkite įrankių juostą:
Sukūrę įrankių mygtuką, šiuo atveju įdėsime piktogramą (pagal nutylėjimą galite rasti daug piktogramų čia) su «from_stock (Gtk.Stock.IconName):
Matome, kad savo programoje turime juostą su dviem mygtukais viršuje, kur pirmąjį naudosime kurdami naujus klausimus, o antrąjį - importuodami klausimus (per failą):
Klausimų kūrimas:
Mygtukas, kurį sukūrėme anksčiau (įrankių juostoje) spustelėjęs, atidarysime naują gtk langą, kuris leis mums pridėti klausimų į mūsų duomenų bazę:
Norėdami sukurti naują langą, sukursime naują klasę, kurią vadinsime klausimais ir kaip mūsų „App“ klasė sukurs naują langą (this.window = new Gtk.Window ();)
Norėdami sukurti grafinę sąsają, naudosime kelis komponentus;
-Label (klausimai)
- Įrašas (kur parašysime klausimą)
-Label (atsakymai)
- 4 horizontalūs langeliai, kuriuose bus įrašas (atsakymas) ir jungiklis (norint pasirinkti, ar jis teisingas)
-Mygtukas (užbaigti)
Mes galime pamatyti, kaip tai atrodo:
Norėdami išsaugoti klausimą, turėsime gauti įrašų tekstą, jie gaunami su get_text (), kuris grąžina eilutę.
Norėdami sužinoti, ar jungiklis yra aktyvus, galime naudoti jo metodą gauti_aktyvus (), kuris grįžta į tiesą, jei jis įjungtas, ir įsijungia, jei jis išjungtas.
50% „Freeze“ ir „Pass“ mygtukai:
-penkiasdešimt%:
50% turime tik pažiūrėti, kuris mygtukas yra teisingas, ir pašalinti 2 neteisingus mygtukus, šiuo atveju juos atšauksime naudodami set_sensitive (false).
Rezultatas:
-Šaldyti:
Vėl nustatėme juostą į 0.
this.time_bar.set_fraction (0);
-Pass:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Kita dalis (4):
Kitoje dalyje pamatysime, kaip patobulinti mūsų programos aspektus, pvz., Kad klausimai ne visada rodomi toje pačioje pozicijoje, įdėkite piktogramą į programą ...
Man patinka atsakymai ... haha .. Sveikinimai
Labai geri šie straipsniai apie valą .. tikiuosi, kad kiti .. sveikinimai
Laukiu jūsų įrašo apie „Vala“, tikiuosi, kad bus daug pristatymų. Cheers!
Gražus straipsnis, ačiū už pasidalinimą.
Sveiki,
Stebėjau ankstesnius jūsų įrašus kuriant šią programą. Problema kyla dabar, kai bandau patekti į naujo lango prieigas, tai darau taip, naudodamas „createQuestions“ klasės (langą kuriančios klasės) metodą saveC.
public void saveC () {
eilutė str = questionE.get_text ();
stdout.printf ("Sutartis% s \ n", str);
}
Bet išvesties tai gaunu:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: teiginys „GTK_IS_ENTRY (įrašas)“ nepavyko
Sutartis (niekinė)
Aš mačiau keletą pavyzdžių ir apibrėždamas metodus, kurie prieina prie įėjimo, jie daro kažką panašaus:
void on_activate (Gtk. Įėjimo įrašas) {
vardas = įrašas.get_text ();
spausdinti ("\ nSveiki" + vardas + "! \ n \ n");
}
Bet jie turi tik vieną įrašą ir šiame pavyzdyje yra 5, taigi čia aš jau pasiklydau, galėtumėte mane geriau nukreipti.
Na, kai kuriate įvestis, nesuteikiate jiems to paties pavadinimo, kad gautumėte tekstą, kurį jūs darote:
r1 = įrašas1.get_text ();
r2 = įrašas2.get_text ();
r3 = įrašas3.get_text ();
r4 = įrašas4.get_text ();
Jei norite, įdėkite popierių ir aš jį pažiūrėsiu
lolbimbo, jei iš tikrųjų turiu juos skirtingais pavadinimais, bet testams naudoju tik vieną, nes nė vienas iš jų negrąžina teksto, kurį įdėjau į įrašą, jis siunčia man aukščiau minėtą klaidą:
Bet išvesties tai gaunu:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: teiginys „GTK_IS_ENTRY (įrašas)“ nepavyko
Sutartis (niekinė)
Aš vis dar tiriu ...
Cheers. !!
Paruošta čia yra šaltinis, sveikinimai.
http://pastebin.com/pZG8GbrY
Sveiki, Hiramai, pažiūrėk, aš jums pasakysiu, kaip jūs turite tai padaryti, kad išspręstumėte tai, pirmiausia, mes kuriame naują langą (jis nėra pagrindinis), o paskambindamas įrašui (atsiprašau už žodžius) aš nežinau, kodėl Tas šūdas negrįžta taip, lyg tai būtų įrašas, bet valdiklis, bet, hei, norėdami jį išspręsti, tiesiog pakeiskite visus statinius komponentus, kuriuos sukūrėte į dinaminius, naudodami var:
var questionE = naujas Gtk.Entry ();
tada funkcija veiks ir gausite tekstą įrašo viduje.
save.clicked.connect (() => {
// eilutė str = this.questionE.get_text ();
stdout.printf ("Sutartis% s \ n", askE.get_text ());
});
Galiausiai nepamirškite pakeisti eilutės, į kurią įtraukėte įrašą, kad jis būtų rodomas:
askE.show ();
Aš palieku jums visą kodą su modifikacija, kad galėtumėte patikrinti, ar jis jau veikia, ty jei turite tęsti programą, turite pakeisti visus elementus (bent jau įrašus).
http://paste.desdelinux.net/5048
saludos
Chale, čia vėl varginu, aš vis dar turiu problemų, rodomas kodas yra gerai, tik tuo atveju kažkas atsitinka:
save.clicked.connect (() => {
// eilutė str = this.questionE.get_text ();
stdout.printf ("Sutartis% s \ n", askE.get_text ());
});
Jis yra „Klausimų“ klasės viduje ir veikia gerai, bet kai norite patekti iš „saveC“, jis nekompiliuoja, išmeta šią klaidą:
bu01.vala: 50.38-50.50: klaida: 1 argumentas: negalima konvertuoti iš „Questions.saveC“ į „Gtk.Button.clicked“
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: įspėjimas: Gtk.Stock nebenaudojamas nuo 3.10
bu01.vala: 260.59-260.67: įspėjimas: Gtk.Stock nebenaudojamas nuo 3.10
Kompiliacija nepavyko: 1 klaida (-os), 2 įspėjimai (-ai)
Noriu manyti, kad tai įvyko dėl parametro perdavimo, kai įvyksta paspaudimo įvykis:
this.guardar.clicked.connect (this.guardarC);
Iš anksto dėkoju už atsiliepimus; čia palieku klaidos kodą: http://pastebin.com/pLzExhrb
Aš to neišbandžiau, bet manau, kad argumento pašalinimas iš funkcijos jį išmes.
public void saveC (Gtk. Įrašas prašoE) {
eilutė str = questionE.get_text ();
stdout.printf ("Sutartis% s \ n", str);
}
a:
public void saveC () {
eilutė str = questionE.get_text ();
stdout.printf ("Sutartis% s \ n", str);
}
lolbimbo, bandžiau pašalinti argumentą ir jis vis dar neveikia,
Aš vis dar bandau suprasti problemą, esu „Vala“ naujokas ir negaliu rasti daug dokumentų, tikiuosi greitai rasti sprendimą arba laukti, kol išleisite ketvirtąją xD dalį.
Aš vis bandau ...
Sveikinimai.