Ustvarjanje aplikacije (Vala + GTK 3) [3. del]

V tem delu bomo videli, kako ustvariti novo okno in ga oblikovati z GTK. Videli bomo tudi nekatere funkcionalnosti, na primer dodajanje vprašanj in uporabo treh gumbov (50%, zamrznitev in podaja).

ToolBar in ToolButton

Ustvari orodno vrstico:

app2

Ustvarimo ToolButton, v tem primeru bomo postavili ikono (privzeto lahko najdete veliko ikon tukaj) z «from_stock (Gtk.Stock.IconName):

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

Vidimo lahko, da imamo v naši aplikaciji vrstico z dvema gumboma na vrhu, kjer bomo s prvim ustvarili nova vprašanja, z drugim pa za uvoz vprašanj (prek datoteke):

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

Ustvarjanje vprašanj:
Gumb, ki smo ga prej ustvarili (v orodni vrstici), ko ga kliknemo, bo odprl novo okno gtk, ki nam bo omogočilo dodajanje vprašanj v našo bazo podatkov:

app1

Če želite ustvariti novo okno, bomo ustvarili nov razred, ki ga bomo imenovali Vprašanja, in kako bo naš razred aplikacij ustvaril novo okno (this.window = new Gtk.Window ();)

Za izdelavo grafičnega vmesnika bomo uporabili nekaj komponent po vrstnem redu;

-Nalepka (vprašanja)

- Vnos (kjer bomo napisali vprašanje)

-Etiketa (odgovori)

- 4 vodoravna polja, ki bodo vsebovala vnos (odgovor) in stikalo (če želite izbrati, ali je pravilen)

-Gumb (za dokončanje)

Vidimo lahko, kako izgleda:

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

Če želite shraniti vprašanje, bomo morali dobiti besedilo vnosov, dobimo jih z get_text (), ki vrne niz.

app5

Če želimo vedeti, ali je stikalo aktivno, lahko uporabimo njegovo metodo get_active (), ki vrne true, če je vklopljeno, in flase, če je izklopljeno.

 50%, gumbi Freeze in Pass:

 -petdeset%:

Za 50% moramo samo pogledati, kateri je pravi gumb in odstraniti 2, ki nista pravilna, v tem primeru jih prekličemo s set_sensitive (false).

app4

Rezultat:

app6

- Zamrznitev:

Vrstico smo ponovno nastavili na 0.

this.time_bar.set_fraction (0);

-Podhod:

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

 Naslednji del (4):

V naslednjem delu bomo videli, kako izboljšati vidike naše aplikacije, na primer, da se vprašanja ne prikažejo vedno v istem položaju, da aplikaciji damo ikono ...


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   f3niX je dejal

    Obožujem odgovore ... haha ​​.. Lep pozdrav

  2.   panhomoro je dejal

    Ti članki o vali so zelo dobri .. upam, da ostali .. lep pozdrav

  3.   CR0T0. je dejal

    Čakam na vaš vstop na Valo, upam, da bo veliko pošiljk. Na zdravje!

  4.   pptru je dejal

    Lep članek, hvala za delitev.

  5.   Hiram je dejal

    Pozdravljeni,

    Sledil sem vašim prejšnjim vnosom za ustvarjanje te aplikacije, težava pa se pojavi zdaj, ko poskušam dostopati do vnosov novega okna, to naredim na ta način v metodi saveC razreda createQuestions (razred, ki ustvari okno).

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

    Toda na izhodu dobim to:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: trditev `GTK_IS_ENTRY (vnos) 'ni uspela

    Pogodba (nična)

    Videl sem nekaj primerov in v definiciji metod, ki dostopajo do vnosov, naredijo nekaj takega:

    void on_activate (vnos Gtk.Entry) {
    ime = vnos.get_text ();
    print ("\ nPozdravljeni" + ime + "! \ n \ n");
    }

    Imajo pa samo en vnos in v tem primeru jih je 5, zato sem že izgubljen, lahko bi me bolje vodili.

    1.    lolbimbo je dejal

      No, ko ustvarite vnose, jim ne daste istega imena, če želite dobiti besedilo, ki ga imajo:

      r1 = vnos1.get_text ();
      r2 = vnos2.get_text ();
      r3 = vnos3.get_text ();
      r4 = vnos4.get_text ();

      Če želite, dajte pastebin in ga bom pogledal

      1.    Hiram je dejal

        lolbimbo, če jih imam v resnici z različnimi imeni, za preizkuse pa uporabljam samo enega, ker nobeden od njih ne vrne besedila, ki sem ga dal v vnos, mi pošlje zgoraj omenjeno napako:

        Toda na izhodu dobim to:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: trditev `GTK_IS_ENTRY (vnos) 'ni uspela

        Pogodba (nična)

        Še vedno preiskujem ...

        Na zdravje.!!

      2.    Hiram je dejal

        Tukaj je vir, lep pozdrav.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo je dejal

      Živjo, Hiram, poglej, povedal ti bom, kako to storiti, da ga rešiš. Prva stvar je, da ustvarjamo novo okno (ki ni glavno) in med klicem vnosa (oprosti za besede) ne vem zakaj To sranje se ne vrne, kot da bi šlo za vnos, ampak za pripomoček, ampak hej, če ga želite rešiti, morate spremeniti vse statične komponente, ki ste jih ustvarili, v dinamične z uporabo var:

      var questionE = new Gtk.Entry ();

      potem bo funkcija delovala in prejeli boste besedilo znotraj vnosa.

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

      Na koncu ne pozabite spremeniti vrstice, kjer dodate vnos, da se prikaže:

      askE.show ();

      Celotno kodo vam pustim s spremembo, tako da lahko preverite, ali že deluje, torej če morate za nadaljevanje z aplikacijo spremeniti vse elemente (vsaj vnose).

      http://paste.desdelinux.net/5048

      pozdrav

      1.    Hiram je dejal

        Chale, tukaj spet moti, imam težave, koda, ki mi jo pokažeš, je v redu, le nekaj se zgodi v primeru:

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

        Je v razredu Vprašanja in deluje v redu, toda ko hočete vstopiti iz saveC, se ne prevede, vrže mi to napako:

        bu01.vala: 50.38-50.50: napaka: Argument 1: Pretvorbe iz `questions.saveC 'ni mogoče pretvoriti v` Gtk.Button.clicked'
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: opozorilo: Gtk.Stock je zastarel od 3.10
        bu01.vala: 260.59-260.67: opozorilo: Gtk.Stock je zastarel od 3.10
        Prevajanje ni uspelo: 1 napaka (e), 2 opozorilo (i)

        Mislim, da je to zaradi načina, kako posredujem parameter, ko pride do dogodka klik:
        this.guardar.clicked.connect (this.guardarC);

        Vnaprej hvala za povratne informacije; tu pustim kodo, ki vrže napako: http://pastebin.com/pLzExhrb

      2.    lolbimbo je dejal

        Nisem poskusil, vendar mislim, da ga bo odstranjevanje argumenta iz funkcije zavrglo.

        public void saveC (Gtk.Entry vprašaE) {
        niz str = questionE.get_text ();
        stdout.printf ("Pogodba% s \ n", str);
        }

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

      3.    Hiram je dejal

        lolbimbo, poskusil sem odstraniti argument in še vedno ne deluje,

        Še vedno poskušam razumeti težavo, v Vali sem nov in ne najdem veliko dokumentacije, upam, da bom kmalu našel rešitev ali čakal, da boste izdali četrti del xD.

        Še naprej poskušam ...

        Lep pozdrav.