Rakenduse loomine (Vala + GTK 3) [3. osa]

Selles osas näeme, kuidas luua veel üks aken ja kujundada see GTK-ga. Näeme ka mõningaid funktsioone, nagu küsimuste lisamine ja kolme nupu kasutamine (50%, külmutamine ja edastamine).

Tööriistariba ja tööriistanupp

Looge tööriistariba:

app2

Tööriistanupu loomisel paneme sel juhul ikooni (vaikimisi leiate palju ikoone siin) tähisega «from_stock (Gtk.Stock.IconName):

Jäädvusta 2013-12-07 23:26:52

Näeme, et meie rakenduse ülaosas on kahe nupuga riba, kus esimest kasutame uute küsimuste loomiseks ja teist küsimuste importimiseks (faili kaudu):

Jäädvusta 2013-11-08 00:30:32

Küsimuste loomine:
Varem (tööriistaribal) loodud nupp sellele klõpsates avame uue gtk akna, mis võimaldab meil oma andmebaasi lisada küsimusi:

app1

Uue akna loomiseks loome uue klassi, mida nimetame küsimusteks ja kuidas meie rakenduse klass loob uue akna (this.window = new Gtk.Window ();)

Graafilise liidese järjekorras loomiseks kasutame mõnda komponenti;

-Silt (küsimused)

- sissekanne (kuhu me küsimuse kirjutame)

-Silt (vastused)

- 4 horisontaalset kasti, mis sisaldavad kirjet (vastus) ja lülitit (et valida, kas see on õige)

-Nupp (lõpetamiseks)

Näeme, kuidas see välja näeb:

Jäädvusta 2013-12-08 01:07:08

Küsimuse salvestamiseks peame hankima sissekannete teksti, need saadakse stringiga get_text (), mis tagastab stringi.

app5

Et teada saada, kas lüliti on aktiivne, saame selle meetodit kasutada get_active (), mis tagastab väärtuse true, kui see on sisse lülitatud, ja flase, kui see on välja lülitatud.

 50%, nupud Freeze ja Pass:

 -viiskümmend%:

50% puhul peame vaatama ainult selle, mis on õige nupp, ja eemaldama 2 valet, sel juhul tühistame need väärtusega set_sensitive (false).

app4

Tulemus:

app6

- külmutamine:

Panime riba uuesti 0-ni.

this.timebar.set_fraction (0);

-Üle andma:

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

 Järgmine osa (4):

Järgmises osas näeme, kuidas parandada meie rakenduse aspekte, näiteks seda, et küsimused ei ilmu alati samas asendis, pange rakendusele ikoon ...


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   f3niX DIJO

    Mulle meeldivad vastused ... haha ​​.. Tervitused

  2.   panchomora DIJO

    Väga head need artiklid vala kohta .. loodan, et teisedki .. tervitused

  3.   cr0t0 DIJO

    Ma ootan teie sissekannet Vala kohta, loodan, et neid on palju. Tervitades!

  4.   pptru DIJO

    Tore artikkel, aitäh jagamast.

  5.   Hiram DIJO

    Tere,

    Olen selle rakenduse loomisel jälginud teie eelmisi kirjeid, probleem ilmneb nüüd, kui proovin pääseda juurde uue akna sissekannetele, teen seda niimoodi klassi createQuestions (akna loova klassi) meetodis saveC .

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

    Kuid väljundina saan selle:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: väide "GTK_IS_ENTRY (sisestus)" nurjus

    Leping (null)

    Olen näinud mõningaid näiteid ja sissepääsudele juurdepääsu meetodite määratlemisel teevad nad midagi sellist:

    void on_activate (Gtk.Kande kirje) {
    nimi = sisestus.get_text ();
    print ("\ nTere" + nimi + "! \ n \ n");
    }

    Kuid neil on ainult üks sissekanne ja selles näites on neid 5, nii et siin ma juba eksisin, võiksite mind paremini suunata.

    1.    lolbimbo DIJO

      Noh, kui loote sissekandeid, ei anna te neile sama nime, et saada teksti, mille olete teinud:

      r1 = sisestus1.get_text ();
      r2 = sisestus2.get_text ();
      r3 = sisestus3.get_text ();
      r4 = sisestus4.get_text ();

      Kui soovite, pange paber ja ma vaatan seda

      1.    Hiram DIJO

        lolbimbo, kui mul tegelikult on neid erinevate nimedega, kuid testide jaoks kasutan ainult ühte, kuna ükski neist ei tagasta kirjesse sisestatud teksti, siis see saadab mulle ülalnimetatud vea:

        Kuid väljundina saan selle:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: väide "GTK_IS_ENTRY (sisestus)" nurjus

        Leping (null)

        Uurin veel ...

        Terviseks. !!

      2.    Hiram DIJO

        Siin on valmis allikas, tervitused.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo DIJO

      Tere, Hiram, vaata, ma ütlen sulle, kuidas sa pead selle lahendamiseks tegema, esimene asi juhtub seetõttu, et loome uue akna (see pole peamine) ja kirjele helistades (vabandust sõnad) Ma ei tea, miks see pask ei naase nii, nagu oleks see kirje, vaid vidin, aga hei, selle lahendamiseks peate lihtsalt muutma kõik staatilised komponendid, mille lõite, kasutades var

      var questionE = uus Gtk.Entry ();

      siis funktsioon töötab ja saate teksti kirje sees.

      save.clicked.connect (() => {
      // string str = see.küsimusE.get_text ();
      stdout.printf ("Leping% s \ n", askE.get_text ());
      });

      Lõpuks ärge unustage selle kuvamiseks rida, kuhu kirje lisate:

      askE.show ();

      Jätan teile kogu koodi koos muudatustega, et saaksite kontrollida, kas see juba töötab, st kui peate rakenduse jätkamiseks muutma kõiki elemente (vähemalt kirjeid).

      http://paste.desdelinux.net/5048

      seoses

      1.    Hiram DIJO

        Chale, siin jälle tülitades, mul on pidevalt probleeme, minu näidatud kood on korras, ainult juhul juhtub midagi:

        save.clicked.connect (() => {
        // string str = see.küsimusE.get_text ();
        stdout.printf ("Leping% s \ n", askE.get_text ());
        });

        See on klassi Küsimused sees ja töötab hästi, kuid kui soovite siseneda rakendusest saveC, siis see ei kompileeru, vaid viskab mulle selle vea:

        bu01.vala: 50.38-50.50: tõrge: Argument 1: Ei saa teisendada failist "Questions.saveC" versiooniks "Gtk.Button.clicked"
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: hoiatus: GTK.aktsia on alates 3.10-st aegunud
        bu01.vala: 260.59-260.67: hoiatus: GTK.aktsia on alates 3.10-st aegunud
        Koostamine ebaõnnestus: 1 viga, 2 hoiatus

        Ma tahan arvata, et see tuleneb sellest, kuidas ma parameetri edastan kliki sündmuse toimumisel:
        this.guardar.clicked.connect (this.guardarC);

        Täname juba tagasiside eest; siin jätan vea viskava koodi: http://pastebin.com/pLzExhrb

      2.    lolbimbo DIJO

        Ma pole seda proovinud, kuid arvan, et argumendi eemaldamine funktsioonist viskab selle minema.

        public void saveC (Gtk.Kanne küsibE) {
        string str = questionE.get_text ();
        stdout.printf ("Leping% s \ n", str);
        }

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

      3.    Hiram DIJO

        lolbimbo, olen proovinud vaidlust eemaldada ja see ei toimi ikka,

        Püüan endiselt probleemist aru saada, olen Vala jaoks uus ja ma ei leia palju dokumente, loodan, et leian peagi lahenduse või ootan teie neljanda osa xD väljaandmist.

        Proovin edasi ...

        Tervitused.