Krijimi i një aplikacioni (Vala + GTK 3) [pjesa e tretë]

Në këtë pjesë do të shohim se si të krijojmë një dritare tjetër dhe ta dizajnojmë atë me GTK. Ne gjithashtu do të shohim disa funksionalitete si shtimi i pyetjeve dhe përdorimi i tre butonave (50%, ngrirja dhe kalimi).

ToolBar dhe ToolButton

Krijoni një shirit mjetesh:

aplikacioni2

Krijimi i një ToolButton, në këtë rast do të vendosim një ikonë (mund të gjeni shumë ikona si parazgjedhje këtu) me «from_stock (Gtk.Stock.IconName):

Kap nga 2013-12-07 23:26:52

Ne mund të shohim se në aplikacionin tonë kemi në krye një shirit me dy butona, ku do të përdorim të parën për të krijuar pyetje të reja dhe të dytën për të importuar pyetje (përmes një skedari):

Kap nga 2013-11-08 00:30:32

Krijimi i pyetjeve:
Butoni që kemi krijuar më parë (në shiritin e veglave) kur klikojmë mbi të, ne do të hapim një dritare të re gtk që do të na lejojë të shtojmë pyetje në bazën tonë të të dhënave:

aplikacioni1

Për të krijuar një dritare të re do të krijojmë një klasë të re, të cilën do ta quajmë Pyetje, dhe se si klasa jonë e Aplikacioneve do të krijojë një dritare të re (this.window = new Gtk.Window ();)

Ne do të përdorim disa përbërës për të krijuar ndërfaqen grafike sipas radhës;

-Etiketimi (Pyetjet)

- Hyrja (ku do ta shkruajmë pyetjen)

-Etiketimi (përgjigjet)

- 4 kuti horizontale që do të përmbajnë një hyrje (përgjigja) dhe një ndërprerës (për të zgjedhur nëse është i saktë)

-Button (për të përfunduar)

Ne mund të shohim se si duket:

Kap nga 2013-12-08 01:07:08

Për të ruajtur pyetjen do të duhet të marrim tekstin e shënimeve, ato merren me get_text () i cili kthen një varg.

aplikacioni5

Për të ditur nëse një Switch është aktiv, ne mund të përdorim metodën e tij merrni_aktive () e cila kthehet e vërtetë nëse është e ndezur dhe flakë nëse është e fikur.

 50%, butonat Freeze dhe Pass:

 -pesëdhjetë%:

Për 50% duhet vetëm të shohim se cili është butoni i saktë dhe të heqim 2 që nuk janë të sakta, në këtë rast i anulojmë me set_sensitive (false).

aplikacioni4

Rezultati:

aplikacioni6

-Frirja:

Ne vendosëm përsëri shiritin në 0.

this.bar_time.set_fraksioni (0);

-Pas:

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

 Pjesa tjetër (4):

Në këstin tjetër do të shohim se si të përmirësojmë aspektet e aplikimit tonë, siç është që pyetjet të mos shfaqen gjithmonë në të njëjtën pozitë, të vendosim një ikonë në aplikacion ...


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   f3niX dijo

    I dua përgjigjet ... haha ​​.. Përshëndetje

  2.   pançomora dijo

    Shume mire keto artikuj rreth vala .. shpresoj te tjeret .. pershendetje

  3.   cr0t0 dijo

    Unë kam pritur hyrjen tuaj në Vala, shpresoj të ketë shumë dërgesa. Gëzuar!

  4.   pptru dijo

    Artikull i bukur, faleminderit për ndarjen.

  5.   Hiram dijo

    Përshëndetje,

    Unë kam ndjekur shënimet tuaja të mëparshme për krijimin e këtij aplikacioni, problemi vjen tani që përpiqem të hyj në hyrjet e dritares së re, e bëj në këtë mënyrë, në metodën saveC të klasës createQuestions (klasa që krijon dritaren) .

    boshllëk publik shpëtuarC () {
    vargu str = pyetjaE.get_text ();
    stdout.printf ("Traktati% s \ n", rr);
    }

    Por në dalje e marr këtë:
    (bu: 6196): Gtk-KRITIKE **: gtk_entry_get_text: pohimi `GTK_IS_ENTRY (hyrja) dështoi

    Traktati (i pavlefshëm)

    Kam parë disa shembuj dhe në përcaktimin e metodave që hyjnë në hyrje, ata bëjnë diçka të tillë:

    pavlefshme në_aktivizo (hyrja në Gtk. Hyrja) {
    emri = hyrja.get_text ();
    shtyp ("\ n Përshëndetje" + emër + "! \ n \ n");
    }

    Por ata kanë vetëm një hyrje dhe në këtë shembull janë 5, kështu që këtu unë tashmë kam humbur, ju mund të më udhëzoni më mirë.

    1.    lolbimbo dijo

      Epo, kur krijoni shënimet nuk u jepni të njëjtin emër, për të marrë tekstin që ju keni bërë:

      r1 = hyrja1.get_text ();
      r2 = hyrja2.get_text ();
      r3 = hyrja3.get_text ();
      r4 = hyrja4.get_text ();

      Nëse dëshironi, vendosni një paste dhe unë do ta shikoj

      1.    Hiram dijo

        lolbimbo nëse në fakt i kam me emra të ndryshëm, por po përdor vetëm një për teste pasi që asnjëri nuk e kthen tekstin që vendos në hyrje, më dërgon gabimin e përmendur më sipër:

        Por në dalje e marr këtë:
        (bu: 6196): Gtk-KRITIKE **: gtk_entry_get_text: pohimi `GTK_IS_ENTRY (hyrja) dështoi

        Traktati (i pavlefshëm)

        Unë jam ende duke hetuar ...

        Brohoritje. !!

      2.    Hiram dijo

        Gati këtu është burimi, përshëndetje.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo dijo

      Përshëndetje Hiram, shiko, do të të tregoj se si duhet ta bësh për ta zgjidhur, gjëja e parë që ndodh kjo sepse po krijojmë një dritare të re (nuk është kryesore), dhe kur telefonon hyrjen, (më vjen keq për fjalët) Unë nuk e di pse Kjo mut nuk kthehet sikur të ishte një hyrje por një Vegël, por hej, për ta zgjidhur atë thjesht duhet të ndryshoni të gjithë përbërësit statik që keni krijuar në dinamik duke përdorur var:

      var pyetjeE = Gtk i ri.Hyrja ();

      atëherë funksioni do të funksionojë dhe ju do të merrni tekstin brenda hyrjes.

      save.clicked.connect (() => {
      // vargu str = this.questionE.get_text ();
      stdout.printf ("Traktati% s \ n", askE.get_text ());
      });

      Në fund, mos harroni të ndryshoni vijën ku shtoni hyrjen për ta treguar atë:

      askE.show ();

      Unë ju lë kodin e plotë me modifikimin në mënyrë që të mund të kontrolloni se ai tashmë funksionon, domethënë nëse duhet të ndryshoni të gjithë elementët (të paktën shënimet) për të vazhduar me aplikimin.

      http://paste.desdelinux.net/5048

      të fala

      1.    Hiram dijo

        Chale, këtu duke u mërzitur përsëri, unë vazhdoj të kem probleme, kodi që ti më tregon është i mirë, vetëm diçka ndodh në rast:

        save.clicked.connect (() => {
        // vargu str = this.questionE.get_text ();
        stdout.printf ("Traktati% s \ n", askE.get_text ());
        });

        Insideshtë brenda klasës Pyetjet dhe funksionon mirë, por kur dëshiron të hysh nga saveC, nuk përpilohet, më sjell këtë gabim:

        bu01.vala: 50.38-50.50: gabim: Argumenti 1: Nuk mund të shndërrohet nga "Questions.saveC" në "Gtk.Button.clicked"
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: paralajmërim: Gtk. Aksioni është zhvlerësuar që prej 3.10
        bu01.vala: 260.59-260.67: paralajmërim: Gtk. Aksioni është zhvlerësuar që prej 3.10
        Përpilimi dështoi: 1 gabim, 2 paralajmërim

        Dua të mendoj se është për shkak të mënyrës sesi e kaloj parametrin kur ndodh ngjarja e klikimit:
        this.guardar.clicked.connect (this.guardarC);

        Faleminderit paraprakisht për reagimet; këtu e lë kodin që hedh gabimin: http://pastebin.com/pLzExhrb

      2.    lolbimbo dijo

        Unë nuk e kam provuar por mendoj se heqja e argumentit nga funksioni do ta flakë atë larg.

        boshllëk publik saveC (Gtk.Entry pyetE) {
        vargu str = pyetjaE.get_text ();
        stdout.printf ("Traktati% s \ n", rr);
        }

        a:
        boshllëk publik shpëtuarC () {
        vargu str = pyetjaE.get_text ();
        stdout.printf ("Traktati% s \ n", rr);
        }

      3.    Hiram dijo

        lolbimbo, kam provuar ta heq argumentin dhe akoma nuk funksionon,

        Unë jam ende duke u përpjekur për të kuptuar problemin, unë jam i ri në Vala dhe unë nuk mund të gjej shumë dokumentacion, unë shpresoj që të gjej zgjidhje së shpejti ose të pres që ju të lëshoni pjesën e katërt xD.

        Vazhdoj te provoj ...

        Përshëndetje.