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

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

ToolBar i ToolButton

Kreirajte traku s alatima:

app2

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

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

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

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

Stvaranje pitanja:
Dugme koje smo prethodno kreirali (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 kreirali novi prozor, kreirać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 kreiranje grafičkog sučelja po redu;

-Label (Pitanja)

- Unos (gdje ćemo napisati pitanje)

-Oznaka (odgovori)

- 4 horizontalna polja koja će sadržavati unos (odgovor) i prekidač (da biste izabrali da li je tačan)

-Gumb (za dovršetak)

Možemo vidjeti kako to izgleda:

Snimka 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 da li je komutator aktivan, možemo koristiti njegovu metodu get_active () koji vraća true ako je uključen i flase ako je isključen.

 50%, tipke 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 ih otkazujemo s set_sensitive (false).

app4

Rezultat:

app6

-Friz:

Ponovo smo postavili traku na 0.

this.time_bar.set_fraction (0);

-Pass:

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, stavimo ikonu u aplikaciju ...


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   f3niX rekao je

    Volim odgovore ... haha ​​.. Pozdrav

  2.   panchomora rekao je

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

  3.   cr0t0 rekao je

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

  4.   pptru rekao je

    Lijep članak, hvala na dijeljenju.

  5.   Hiram rekao je

    zdravo,

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

    javna void saveC () {
    string 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 ovog:

    void on_activate (Gtk.Entry unos) {
    name = entry.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 rekao je

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

      r1 = entry1.get_text();
      r2 = entry2.get_text();
      r3 = entry3.get_text();
      r4 = entry4.get_text();

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

      1.    Hiram rekao je

        lolbimbo ako ih zapravo imam s različitim imenima, ali koristim samo jedno za testove, jer niko od njih 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 rekao je

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

    2.    lolbimbo rekao je

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

      var questionE = new Gtk.Entry ();

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

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

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

      askE.show ();

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

      http://paste.desdelinux.net/5048

      Saludos

      1.    Hiram rekao je

        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 (() => {
        // string str = this.questionE.get_text ();
        stdout.printf ("Ugovor% s \ n", askE.get_text ());
        });

        Nalazi se unutar klase Pitanja i radi u redu, ali kada želi ući iz saveC-a, ne kompajlira se, već mi donosi ovu grešku:

        bu01.vala: 50.38-50.50: greš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 upozorenje

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

        Unaprijed se zahvaljujem na povratnim informacijama; ovdje ostavljam kod koji baca grešku: http://pastebin.com/pLzExhrb

      2.    lolbimbo rekao je

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

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

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

      3.    Hiram rekao je

        lolbimbo, pokušao sam ukloniti argument, ali on i dalje ne funkcionira,

        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.