Vytvorenie aplikácie (Vala + GTK 3) [3. časť]

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:

app2

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):

Zachytiť od 2013-12-07 23:26:52

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):

Zachytiť od 2013-11-08 00:30:32

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:

app1

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á:

Zachytiť od 2013-12-08 01:07:08

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.

app5

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).

app4

výsledok:

app6

-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 ...


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   f3niX dijo

    Milujem odpovede ... haha ​​.. Zdravím vás

  2.   panchomora dijo

    Velmi dobre tieto clanky o vala .. dufam ostatnym .. pozdravujem

  3.   cr0t0 dijo

    Čakám na váš vstup na Vala, dúfam, že bude veľa dodávok. Na zdravie!

  4.   pptru dijo

    Pekný článok, ďakujeme za zdieľanie.

  5.   Hiram dijo

    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ť.

    1.    lolbimbo dijo

      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

      1.    Hiram dijo

        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. !!

      2.    Hiram dijo

        Pripravený je tu zdroj, pozdravy.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo dijo

      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

      1.    Hiram dijo

        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

      2.    lolbimbo dijo

        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);
        }

      3.    Hiram dijo

        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.