Alkalmazás létrehozása (Vala + GTK 3) [3. rész]

Ebben a részben meglátjuk, hogyan hozhatunk létre egy másik ablakot és tervezhetjük azt a GTK-val. Látni fogunk néhány olyan funkciót is, mint a kérdések hozzáadása és a három gomb használata (50%, fagyasztás és átadás).

Eszköztár és Eszköztár

Hozzon létre egy eszköztárat:

kb. 2

ToolButton létrehozása, ebben az esetben egy ikont teszünk (alapértelmezés szerint sok ikont talál itt) a «from_stock (Gtk.Stock.IconName) kifejezéssel:

Rögzítés 2013-12-07 23:26:52

Láthatjuk, hogy alkalmazásunkban van egy sáv, amelynek tetején két gomb található, ahol az elsőt új kérdések létrehozásához, a másodikat pedig kérdések importálásához használjuk (fájlon keresztül):

Rögzítés 2013-11-08 00:30:32

Kérdések készítése:
A korábban (az eszköztáron) létrehozott gombra kattintva megnyílik egy új gtk ablak, amely lehetővé teszi számunkra, hogy kérdéseket tegyünk fel az adatbázisunkba:

kb. 1

Új ablak létrehozásához létrehozunk egy új osztályt, amelyet Kérdéseknek hívunk, és hogy az App osztályunk hogyan hoz létre új ablakot (this.window = new Gtk.Window ();)

Néhány összetevőt használunk a grafikus felület sorrendben történő létrehozásához;

-Címke (kérdések)

- Nevezés (ahol megírjuk a kérdést)

-Címke (válaszok)

- 4 vízszintes mező, amely egy bejegyzést (a választ) és egy kapcsolót tartalmaz (hogy kiválaszthassa, hogy helyes-e)

-Gomb (a befejezéshez)

Láthatjuk, hogyan néz ki:

Rögzítés 2013-12-08 01:07:08

A kérdés elmentéséhez meg kell szereznünk a bejegyzések szövegét, ezeket a get_text () paranccsal kapjuk meg, amely egy karakterláncot ad vissza.

kb. 5

Tudni tudjuk, hogy ha egy kapcsoló aktív, használhatjuk-e a módszerét get_active (), amely igaz, ha be van kapcsolva, és villog, ha ki van kapcsolva.

 50%, Freeze és Pass gombok:

 -ötven%:

50% -nál csak azt kell megvizsgálnunk, hogy melyik a helyes gomb, és eltávolítunk 2-et, ami nem megfelelő, ebben az esetben a set_sensitive (false) paranccsal töröljük őket.

kb. 4

eredmény:

kb. 6

-Fagy:

Ismét 0-ra állítottuk a mércét.

this.time_bar.set_fraction (0);

-Pass:

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

 Következő rész (4):

A következő részletben megtudhatjuk, hogyan lehetne javítani alkalmazásunk egyes aspektusait, például azt, hogy a kérdések nem mindig ugyanazon a helyen jelennek meg, helyezzen el egy ikont az alkalmazásban ...


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   f3niX dijo

    Szeretem a válaszokat ... haha ​​.. Üdvözlet

  2.   panchomora dijo

    Nagyon jó ezek a cikkek a valáról .. remélem a többiek .. üdvözlet

  3.   cr0t0 dijo

    Várakozásomra vár a Vala-ra vonatkozó bejegyzésed, remélem, sok lesz a szállítás. Egészségére!

  4.   pptru dijo

    Kedves cikk, köszönöm a megosztást.

  5.   Hiram dijo

    Helló,

    Követtem a korábbi bejegyzéseket ennek az alkalmazásnak a létrehozásához, a probléma most jelentkezik, amikor megpróbálom elérni az új ablak bejáratait, ezt így csinálom, a createQuestions osztály (az ablakot létrehozó osztály) saveC metódusában.

    public void saveC () {
    string str = questionE.get_text ();
    stdout.printf ("Szerződés% s \ n", str);
    }

    De a kimeneten ezt kapom:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: "GTK_IS_ENTRY (bejegyzés)" állítás sikertelen

    Szerződés (null)

    Láttam néhány példát, és a belépőket elérő módszerek meghatározásában valami ilyesmit tesznek:

    void on_activate (Gtk. Bejegyzés bejegyzése) {
    név = bejegyzés.get_text ();
    print ("\ nHelló" + név + "! \ n \ n");
    }

    De csak egy bejegyzésük van, és ebben a példában 5 van, tehát itt már eltévedtem, jobban tudnál vezetni.

    1.    lolbimbo dijo

      Nos, amikor létrehozza a bejegyzéseket, nem adja meg nekik ugyanazt a nevet, hogy megszerezhesse a náluk lévő szöveget:

      r1 = bejegyzés1.get_text ();
      r2 = bejegyzés2.get_text ();
      r3 = bejegyzés3.get_text ();
      r4 = bejegyzés4.get_text ();

      Ha akarsz, tegyél egy papint, és megnézem

      1.    Hiram dijo

        lolbimbo, ha valójában különböző nevekkel rendelkezem velük, de csak egyet használok a tesztekhez, mivel egyik sem adja vissza a bejegyzésbe tett szöveget, az a fent említett hibát küldi nekem:

        De a kimeneten ezt kapom:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: "GTK_IS_ENTRY (bejegyzés)" állítás sikertelen

        Szerződés (null)

        Még vizsgálom ...

        Egészségére.!!

      2.    Hiram dijo

        Kész itt a forrás, üdvözlet.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo dijo

      Helló, Hiram, nézze, elmondom, hogyan kell tennie a megoldáshoz, az első dolog azért történik, mert új ablakot hozunk létre (nem ez a fő), és amikor a bejegyzést felhívom (elnézést a szavakért), nem tudom miért Ez a szar nem úgy tér vissza, mintha egy bejegyzés lenne, hanem egy Widget, de hé, a megoldáshoz egyszerűen meg kell változtatnia az összes statikus komponenst, amelyet dinamikusan létrehozott a var segítségével:

      var questionE = új Gtk.Entry ();

      akkor a funkció működni fog, és megkapja a szöveget a bejegyzésen belül.

      save.clicked.connect (() => {
      // string str = this.questionE.get_text ();
      stdout.printf ("Szerződés% s \ n", askE.get_text ());
      });

      Végül ne felejtse el megváltoztatni azt a sort, ahová a bejegyzést hozzáadja:

      askE.show ();

      A teljes kódot meghagyom a módosítással, hogy ellenőrizhesse, hogy már működik-e, vagyis ha az alkalmazás folytatásához meg kell változtatnia az összes elemet (legalább a bejegyzéseket).

      http://paste.desdelinux.net/5048

      Üdvözlet

      1.    Hiram dijo

        Chale, itt megint zavar, továbbra is problémáim vannak, a kód, amit megmutatsz, rendben van, csak valami történik az esetben:

        save.clicked.connect (() => {
        // string str = this.questionE.get_text ();
        stdout.printf ("Szerződés% s \ n", askE.get_text ());
        });

        A Questions osztályon belül van, és jól működik, de amikor a saveC-ből akar belépni, nem fordít, hanem ezt a hibát dobja el:

        bu01.vala: 50.38-50.50: hiba: 1. argumentum: Nem lehet átalakítani a "Questions.saveC" -ről "Gtk.Button.clicked" -re
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: figyelmeztetés: A Gtk.Stock 3.10 óta elavult
        bu01.vala: 260.59-260.67: figyelmeztetés: A Gtk.Stock 3.10 óta elavult
        A fordítás sikertelen: 1 hiba, 2 figyelmeztetés

        Azt akarom gondolni, hogy a kattintási esemény bekövetkezésekor adom át a paramétert:
        this.guardar.clicked.connect (this.guardarC);

        Előre is köszönöm a visszajelzéseket; itt hagyom a hibát dobó kódot: http://pastebin.com/pLzExhrb

      2.    lolbimbo dijo

        Még nem próbáltam ki, de úgy gondolom, hogy az argumentum eltávolítása a függvényből el fogja dobni.

        public void saveC (Gtk. A bejegyzés kériE) {
        string str = questionE.get_text ();
        stdout.printf ("Szerződés% s \ n", str);
        }

        a:
        public void saveC () {
        string str = questionE.get_text ();
        stdout.printf ("Szerződés% s \ n", str);
        }

      3.    Hiram dijo

        lolbimbo, megpróbáltam eltávolítani az érvet, és még mindig nem működik,

        Még mindig próbálom megérteni a problémát, új vagyok a Vala számára, és nem találok sok dokumentációt, remélem, hogy hamarosan megtalálom a megoldást, vagy megvárom, amíg kiadja az xD negyedik részét.

        Próbálom tovább ...

        Üdvözlet.