Vytvoření aplikace (Vala + GTK 3) [3. část]

V této části uvidíme, jak vytvořit další okno a navrhnout ho pomocí GTK. Uvidíme také některé funkce, jako je přidávání otázek a používání tří tlačítek (50%, zmrazení a předání).

ToolBar a ToolButton

Vytvořit panel nástrojů:

app2

Při vytváření ToolButton v tomto případě vložíme ikonu (ve výchozím nastavení najdete mnoho ikon zde) s «from_stock (Gtk.Stock.IconName):

Zachytit od 2013-12-07 23:26:52

Vidíme, že v naší aplikaci máme nahoře lištu se dvěma tlačítky, kde první použijeme k vytvoření nových otázek a druhou k importu otázek (prostřednictvím souboru):

Zachytit od 2013-11-08 00:30:32

Vytváření otázek:
Tlačítko, které jsme dříve vytvořili (na panelu nástrojů), když na něj klikneme, otevřeme nové okno gtk, které nám umožní přidávat otázky do naší databáze:

app1

Chcete-li vytvořit nové okno, vytvoříme novou třídu, kterou budeme nazývat Dotazy, a jak naše třída aplikace vytvoří nové okno (this.window = new Gtk.Window ();)

K vytvoření grafického rozhraní v pořádku použijeme několik komponent;

-Štítek (Dotazy)

- Vstup (kde budeme psát otázku)

-Label (odpovědi)

- 4 vodorovná pole, která budou obsahovat Vstup (odpověď) a Přepínač (vybrat, zda je správný)

-Tlačítko (k dokončení)

Vidíme, jak to vypadá:

Zachytit od 2013-12-08 01:07:08

Chcete-li uložit otázku, budeme muset získat text záznamů, které se získají pomocí metody get_text (), která vrací řetězec.

app5

Abychom věděli, zda je přepínač aktivní, můžeme použít jeho metodu get_active () který vrací true, pokud je zapnutý, a flase, pokud je vypnutý.

 50%, tlačítka Freeze a Pass:

 -padesáti% :

U 50% se musíme pouze podívat, které tlačítko je správné, a odstranit 2, které nejsou správné, v tomto případě je zrušíme pomocí set_sensitive (false).

app4

výsledek:

app6

-Zmrazit:

Znovu jsme nastavili lištu na 0.

this.time_bar.set_fraction (0);

-Složit:

button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});

 Další část (4):

V příštím pokračování uvidíme, jak vylepšit aspekty naší aplikace, například to, že se otázky nebudou vždy zobrazovat na stejné pozici, umístit na aplikaci ikonu ...


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   f3niX řekl

    Miluji odpovědi ... haha ​​.. Zdravím

  2.   panchomora řekl

    Velmi dobré tyto články o vala .. doufám, že ostatní .. pozdravy

  3.   cr0t0 řekl

    Čekám na váš vstup na Valu, doufám, že bude mnoho dodávek. Na zdraví!

  4.   pptru řekl

    Pěkný článek, děkuji za sdílení.

  5.   Hiram řekl

    Dobrý den,

    Sledoval jsem vaše předchozí položky pro vytvoření této aplikace, problém přichází teď, když se snažím získat přístup k záznamům nového okna, dělám to tak, metodou saveC třídy createQuestions (třída, která vytváří okno) .

    public void saveC () {
    řetězec str = questionE.get_text ();
    stdout.printf ("Smlouva% s \ n", str);
    }

    Ale na výstupu dostanu toto:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion `GTK_IS_ENTRY (entry) 'failed

    Smlouva (null)

    Viděl jsem několik příkladů a v definici metod, které přistupují k záznamům, dělají něco takového:

    void on_activate(Gtk.Entry entry) {
    jméno = záznam.get_text ();
    print ("\ nAhoj" + jméno + "! \ n \ n");
    }

    Ale mají pouze jeden vstup a v tomto příkladu je 5, takže tady jsem už ztracen, mohl byste mě lépe vést.

    1.    lolbimbo řekl

      Když vytvoříte záznamy, nedáte jim stejný název, abyste získali text, který mají:

      r1 = záznam1.get_text ();
      r2 = záznam2.get_text ();
      r3 = záznam3.get_text ();
      r4 = záznam4.get_text ();

      Pokud chcete, vložte pastebin a já se na to podívám

      1.    Hiram řekl

        lolbimbo, pokud je ve skutečnosti mám s různými jmény, ale používám pouze jeden pro testy, protože žádný z nich nevrací text, který jsem vložil do položky, pošle mi chybu uvedenou výše:

        Ale na výstupu dostanu toto:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion `GTK_IS_ENTRY (entry) 'failed

        Smlouva (null)

        Stále vyšetřuji ...

        Na zdraví.!!

      2.    Hiram řekl

        Připraven je zdroj, pozdravy.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo řekl

      Ahoj Hirame, podívej, řeknu ti, jak to musíš udělat, abys to vyřešil, první věc, která se stane, protože vytváříme nové okno (není to hlavní), a při volání záznamu (omlouvám se za slova) nevím proč Že hovno se nevrátí, jako by to byl záznam, ale Widget, ale hej, k jeho vyřešení stačí změnit všechny statické komponenty, které jste vytvořili, na dynamické pomocí var:

      var questionE = new Gtk.Entry ();

      pak funkce bude fungovat a obdržíte text uvnitř položky.

      save.clicked.connect (() => {
      // řetězec str = this.questionE.get_text ();
      stdout.printf ("Smlouva% s \ n", askE.get_text ());
      });

      Nakonec nezapomeňte změnit řádek, kam přidáte položku, aby se zobrazila:

      askE.show ();

      Nechám vám kompletní kód s úpravou, abyste mohli zkontrolovat, zda již funguje, to znamená, pokud musíte změnit všechny prvky (alespoň položky), abyste mohli pokračovat v aplikaci.

      http://paste.desdelinux.net/5048

      pozdravy

      1.    Hiram řekl

        Chale, tady se znovu trápím, stále mám problémy, kód, který mi ukážeš, je v pořádku, jen se něco stane v případě:

        save.clicked.connect (() => {
        // řetězec str = this.questionE.get_text ();
        stdout.printf ("Smlouva% s \ n", askE.get_text ());
        });

        Je to uvnitř třídy Questions a funguje to dobře, ale když chcete vstoupit z saveC, nezkompiluje mi to hodí tuto chybu:

        bu01.vala: 50.38-50.50: chyba: Argument 1: Nelze převést z `Questions.saveC 'na` Gtk.Button.clicked'
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: varování: Gtk.Stock je zastaralý od 3.10
        bu01.vala: 260.59-260.67: varování: Gtk.Stock je zastaralý od 3.10
        Kompilace se nezdařila: 1 chyba (y), 2 varování (y)

        Chci si myslet, že je to kvůli způsobu, jakým předávám parametr, když dojde k události kliknutí:
        this.guardar.clicked.connect (this.guardarC);

        Předem děkujeme za zpětnou vazbu; zde nechávám kód, který vyvolá chybu: http://pastebin.com/pLzExhrb

      2.    lolbimbo řekl

        Nezkoušel jsem to, ale myslím, že odstranění argumentu z funkce to vyhodí.

        public void saveC (Gtk.Entry askE) {
        řetězec str = questionE.get_text ();
        stdout.printf ("Smlouva% s \ n", str);
        }

        a:
        public void saveC () {
        řetězec str = questionE.get_text ();
        stdout.printf ("Smlouva% s \ n", str);
        }

      3.    Hiram řekl

        lolbimbo, pokusil jsem se odstranit argument a stále to nefunguje,

        Stále se snažím porozumět problému, jsem pro Valu nový a nemohu najít mnoho dokumentace, doufám, že brzy najdu řešení nebo počkám, až vydáte čtvrtou část xD.

        Stále se snažím ...

        Zdravím.