Izrada aplikacije (Vala + GTK 3) [3. dio]

U ovom ćemo dijelu vidjeti kako stvoriti još jedan prozor i dizajnirati ga s GTK-om. Vidjet ćemo i neke funkcionalnosti poput dodavanja pitanja i korištenja tri gumba (50%, zamrzavanje i dodavanje).

ToolBar i ToolButton

Stvorite alatnu traku:

app2

Stvaranjem gumba s alatima, u ovom ćemo slučaju staviti ikonu (prema zadanim postavkama možete pronaći mnoge ikone ovdje) s «from_stock (Gtk.Stock.IconName):

Hvatanje iz 2013-12-07 23:26:52

Vidimo da u našoj aplikaciji imamo traku s dva gumba na vrhu, gdje ćemo prvi koristiti za stvaranje novih pitanja, a drugi za uvoz pitanja (kroz datoteku):

Hvatanje iz 2013-11-08 00:30:32

Izrada pitanja:
Gumb koji smo prethodno stvorili (na alatnoj traci) kada kliknemo na njega, otvorit ćemo novi gtk prozor koji će nam omogućiti dodavanje pitanja u našu bazu podataka:

app1

Da bismo stvorili novi prozor, stvorit ćemo novu klasu koju ćemo nazvati Pitanja i kako će naša klasa App stvoriti novi prozor (this.window = new Gtk.Window ();)

Upotrijebit ćemo nekoliko komponenata za izradu grafičkog sučelja po redu;

-Oznaka (Pitanja)

- Unos (gdje ćemo napisati pitanje)

-Oznaka (odgovori)

- 4 vodoravna okvira koji će sadržavati Unos (odgovor) i Prekidač (za odabir je li točan)

-Gumb (za dovršetak)

Možemo vidjeti kako to izgleda:

Hvatanje iz 2013-12-08 01:07:08

Da bismo spremili pitanje, morat ćemo dobiti tekst unosa, oni se dobivaju pomoću get_text () koji vraća niz.

app5

Da bismo znali je li prekidač aktivan, možemo koristiti njegovu metodu postati_aktivan () koja vraća true ako je uključena i flase ako je isključena.

 50%, gumbi za zamrzavanje i dodavanje:

 -pedeset%:

Za 50% moramo samo pogledati koji je točan gumb i ukloniti 2 koja nisu točna, u ovom slučaju otkazujemo ih s set_sensitive (false).

app4

rezultat:

app6

-Zamrznuti:

Ponovno smo postavili traku na 0.

this.time_bar.set_fraction (0);

-Proći:

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

 Sljedeći dio (4):

U sljedećem dijelu vidjet ćemo kako poboljšati aspekte naše aplikacije, na primjer da se pitanja ne pojavljuju uvijek na istom položaju, stavite ikonu u aplikaciju ...


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   f3niX dijo

    Volim odgovore ... haha ​​.. Pozdrav

  2.   pankomora dijo

    Jako dobri ovi članci o vali .. nadam se i ostalima .. pozdrav

  3.   cr0t0 dijo

    Čekam vaš ulazak na Vala, nadam se da ima mnogo isporuka. Živjeli!

  4.   pptru dijo

    Lijep članak, hvala na dijeljenju.

  5.   Hiram dijo

    Pozdrav,

    Slijedio sam vaše prethodne unose za stvaranje ove aplikacije, problem dolazi sada kad pokušavam pristupiti unosima novog prozora, činim to na ovaj način, u metodi saveC klase createQuestions (klasa koja kreira prozor) .

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

    Ali na izlazu dobivam ovo:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: tvrdnja `GTK_IS_ENTRY (unos) 'nije uspjela

    Ugovor (null)

    Vidio sam nekoliko primjera i u definiciji metoda koje pristupaju unosima čine nešto poput ovoga:

    void on_activate (Unos Gtk.Entry) {
    ime = unos.get_text ();
    ispis ("\ nPozdrav" + ime + "! \ n \ n");
    }

    Ali oni imaju samo jedan unos, a u ovom primjeru ih je 5, tako da sam se ovdje već izgubio, mogli biste me bolje voditi.

    1.    lolbimbo dijo

      Pa, kad kreirate unose, ne dajete im isto ime, da biste dobili tekst koji imaju:

      r1 = unos1.get_text ();
      r2 = unos2.get_text ();
      r3 = unos3.get_text ();
      r4 = unos4.get_text ();

      Ako želite, stavite pastebin i ja ću ga pogledati

      1.    Hiram dijo

        lolbimbo ako ih zapravo imam s različitim imenima, ali koristim samo jedan za testove, jer niti jedan ne vraća tekst koji sam stavio u unos, šalje mi gore spomenutu grešku:

        Ali na izlazu dobivam ovo:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: tvrdnja `GTK_IS_ENTRY (unos) 'nije uspjela

        Ugovor (null)

        Još istražujem ...

        Živjeli.!!

      2.    Hiram dijo

        Spreman je izvor, pozdrav.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo dijo

      Bok Hiram, slušaj, reći ću ti kako to moraš učiniti da to riješiš, prvo što se to dogodi jer stvaramo novi prozor (nije glavni), a kada pozivamo unos, ( oprostite na riječima) Ne znam zašto se to sranje ne vraća kao da je unos već Widget, ali hej, da biste ga riješili, jednostavno morate sve statičke komponente koje ste stvorili promijeniti u dinamičke pomoću var:

      var questionE = novi Gtk.Entry ();

      tada će funkcija raditi i primit ćete tekst unutar unosa.

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

      I na kraju, ne zaboravite promijeniti redak u koji dodajete unos kako bi se prikazao:

      askE.show ();

      Ostavljam vam kompletan kod s izmjenama kako biste mogli provjeriti radi li već, odnosno ako morate promijeniti sve elemente (barem unose) da biste nastavili s aplikacijom.

      http://paste.desdelinux.net/5048

      pozdravi

      1.    Hiram dijo

        Chale, ovdje se opet mučim, i dalje imam problema, kod koji mi pokažeš je u redu, samo se nešto dogodi u slučaju:

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

        Unutar je klase Pitanja i to je u redu, ali kada želite ući iz saveC-a, ne kompajlira se, već mi donosi ovu pogrešku:

        bu01.vala: 50.38-50.50: pogreška: Argument 1: Nije moguće pretvoriti iz `Questions.saveC 'u` Gtk.Button.clicked'
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: upozorenje: Gtk.Stock je zastario od 3.10
        bu01.vala: 260.59-260.67: upozorenje: Gtk.Stock je zastario od 3.10
        Kompilacija nije uspjela: 1 pogreška, 2 upozorenja

        Želim misliti da je to zbog načina na koji prosljeđujem parametar kada se dogodi klik:
        this.guardar.clicked.connect (this.guardarC);

        Unaprijed zahvaljujem na povratnim informacijama; ovdje ostavljam kôd koji baca pogrešku: http://pastebin.com/pLzExhrb

      2.    lolbimbo dijo

        Nisam ga testirao, ali mislim da će ga uklanjanje argumenta iz funkcije baciti.

        javna praznina saveC (Gtk.Entry pitaE) {
        niz str = questionE.get_text ();
        stdout.printf ("Ugovor% s \ n", str);
        }

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

      3.    Hiram dijo

        lolbimbo, pokušao sam ukloniti argument i dalje ne uspijeva,

        Još uvijek pokušavam razumjeti problem, novi sam u Vali i ne mogu naći puno dokumentacije, nadam se da ću uskoro pronaći rješenje ili pričekati da objavite četvrti dio xD.

        Pokušavam i dalje ...

        Pozdrav.