V tejto časti uvidíme, ako vytvoriť ďalšie okno a navrhnúť ho pomocou GTK. Uvidíme tiež niektoré funkcie, ako je pridávanie otázok a používanie troch tlačidiel (50%, zmrazenie a odovzdanie).
ToolBar a ToolButton
Vytvorte panel s nástrojmi:
Pri vytváraní tlačidla s nástrojmi v tomto prípade vložíme ikonu (predvolene nájdete veľa ikon tu) s «from_stock (Gtk.Stock.IconName):
Vidíme, že v našej aplikácii máme lištu s dvoma tlačidlami v hornej časti, kde pomocou prvého vytvoríme nové otázky a druhého importujeme otázky (cez súbor):
Vytváranie otázok:
Tlačidlo, ktoré sme vytvorili predtým (na paneli nástrojov), keď na neho klikneme, otvorí sa nové okno gtk, ktoré nám umožní pridávať otázky do našej databázy:
Ak chcete vytvoriť nové okno, vytvoríme novú triedu, ktorú budeme nazývať Otázky, a ako naša trieda aplikácií vytvorí nové okno (this.window = new Gtk.Window ();)
Na vytvorenie grafického rozhrania použijeme niekoľko komponentov v uvedenom poradí;
-Štítok (otázky)
- Vstup (kde napíšeme otázku)
-Štítok (odpovede)
- 4 horizontálne polia, ktoré budú obsahovať Vstup (odpoveď) a Prepínač (pre výber, či je správny)
-Tlačidlo (na dokončenie)
Vidíme, ako to vyzerá:
Aby sme uložili otázku, ktorú musíme získať, musíme získať text vstupov, ktoré sa získavajú pomocou funkcie get_text (), ktorá vracia reťazec.
Aby sme zistili, či je prepínač aktívny, môžeme použiť jeho metódu get_active (), ktorá vráti hodnotu true, ak je zapnutá, a hodnotu true, ak je vypnutá.
50%, tlačidlá Freeze a Pass:
-Päťdesiat%:
Pri 50% sa musíme iba pozrieť na to, ktoré tlačidlo je správne, a odstrániť 2, ktoré nie sú správne, v takom prípade ich zrušíme pomocou set_sensitive (false).
výsledok:
-Zmraziť:
Lištu sme opäť nastavili na 0.
this.timebar.set_fraction (0);
- preukaz:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Ďalšia časť (4):
V ďalšom pokračovaní uvidíme, ako vylepšiť aspekty našej aplikácie, napríklad tak, že sa otázky nebudú vždy zobrazovať na rovnakej pozícii, umiestnime ikonu na aplikáciu ...
Milujem odpovede ... haha .. Zdravím vás
Velmi dobre tieto clanky o vala .. dufam ostatnym .. pozdravujem
Čakám na váš vstup na Vala, dúfam, že bude veľa dodávok. Na zdravie!
Pekný článok, ďakujeme za zdieľanie.
Dobrý deň,
Pri vytváraní tejto aplikácie som sledoval vaše predchádzajúce záznamy, problém nastáva teraz, keď sa pokúšam získať prístup k položkám nového okna, robím to takto, metódou saveC triedy createQuestions (trieda, ktorá vytvára okno) .
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Zmluva% s \ n", str);
}
Ale na výstupe dostanem toto:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: tvrdenie `GTK_IS_ENTRY (položka) 'zlyhalo
Zmluva (neplatná)
Videl som niekoľko príkladov a v definícii metód, ktoré pristupujú k záznamom, robia niečo také:
neplatné on_activate (záznam Gtk.Entry) {
meno = entry.get_text ();
print ("\ nAhoj" + meno + "! \ n \ n");
}
Majú ale iba jeden vstup a v tomto príklade je ich 5, takže tu som sa už stratil, mohol by si ma lepšie usmerniť.
Keď vytvoríte záznamy, nedávate im rovnaké meno, aby ste dostali text, ktorý majú:
r1 = záznam1.get_text ();
r2 = záznam2.get_text ();
r3 = záznam3.get_text ();
r4 = záznam4.get_text ();
Ak chces, daj si pastebin a ja sa na to pozriem
lolbimbo, ak ich mám v skutočnosti s rôznymi názvami, ale na testy používam iba jeden, pretože žiadny z nich nevráti text, ktorý som vložil do záznamu, pošle mi chybu uvedenú vyššie:
Ale na výstupe dostanem toto:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: tvrdenie `GTK_IS_ENTRY (položka) 'zlyhalo
Zmluva (neplatná)
Stále vyšetrujem ...
Na zdravie. !!
Pripravený je tu zdroj, pozdravy.
http://pastebin.com/pZG8GbrY
Ahoj Hiram, pozri, poviem ti, ako to musíš urobiť - aby si to vyriešil - prvá vec, ktorá sa stane, pretože vytvárame nové okno (nie je to hlavné), a pri volaní záznamu, ( Ospravedlňujem sa za slová) Neviem, prečo sa tá sračka nevracia, akoby to bola položka, ale Widget, ale hej, aby si to vyriešil, musíš zmeniť všetky statické komponenty, ktoré si vytvoril, na dynamické pomocou var:
var questionE = new Gtk.Entry ();
potom bude funkcia fungovať a dostanete text vnútri záznamu.
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Zmluva% s \ n", askE.get_text ());
});
Na záver nezabudnite zmeniť riadok, do ktorého pridáte záznam, aby sa zobrazil:
askE.show ();
Ponechám vám kompletný kód s úpravou, aby ste mohli skontrolovať, či už funguje, to znamená, že ak chcete pokračovať v aplikácii, musíte zmeniť všetky prvky (aspoň položky).
http://paste.desdelinux.net/5048
pozdravy
Chale, tu sa zase trápim, stále mám problémy, kód, ktorý mi ukážeš, je v poriadku, iba sa niečo stane v prípade:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Zmluva% s \ n", askE.get_text ());
});
Nachádza sa vo vnútri triedy Questions a funguje dobre, ale keď chce vstúpiť z saveC, nekompiluje sa, hodí mi túto chybu:
bu01.vala: 50.38-50.50: chyba: Argument 1: Nie je možné prevádzať z `Questions.saveC 'do` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: varovanie: Gtk.Stock je zastaraný od 3.10
bu01.vala: 260.59-260.67: varovanie: Gtk.Stock je zastaraný od 3.10
Kompilácia zlyhala: 1 chyba (y), 2 varovania (y)
Chcem si myslieť, že je to kvôli spôsobu, akým odovzdávam parameter, keď dôjde k udalosti kliknutia:
this.guardar.clicked.connect (this.guardarC);
Za spätnú väzbu vopred ďakujem; tu nechávam kód, ktorý spôsobí chybu: http://pastebin.com/pLzExhrb
Netestoval som to, ale myslím si, že odstránením argumentu z funkcie ho vyhodím.
public void saveC (Gtk.Entry askE) {
string str = questionE.get_text ();
stdout.printf ("Zmluva% s \ n", str);
}
a:
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Zmluva% s \ n", str);
}
lolbimbo, skúsil som odstrániť argument a stále to nefunguje,
Stále sa snažím pochopiť problém, pre Valu som nový a neviem nájsť veľa dokumentácie, dúfam, že čoskoro nájdem riešenie alebo počkám, kým vydáš štvrtý diel xD.
Stále sa snažím ...
Zdravím.