Lietotnes izveide (Vala + GTK 3) [3. daļa]

Šajā daļā mēs redzēsim, kā izveidot citu logu un noformēt to ar GTK. Mēs redzēsim arī dažas funkcijas, piemēram, jautājumu pievienošanu un trīs pogu izmantošanu (50%, iesaldēšana un nodošana).

Rīkjosla un rīkjosla

Izveidojiet rīkjoslu:

app2

Izveidojot rīku pogu, šajā gadījumā mēs ievietosim ikonu (pēc noklusējuma varat atrast daudzas ikonas šeit) ar «from_stock (Gtk.Stock.IconName):

Uzņemiet no 2013. gada 12. septembra 07:23:26

Mēs varam redzēt, ka mūsu lietojumprogrammā mums ir josla ar divām pogām augšpusē, kur pirmo izmantosim jaunu jautājumu izveidošanai, bet otro - jautājumu importēšanai (caur failu):

Uzņemiet no 2013. gada 11. septembra 08:00:30

Jautājumu veidošana:
Poga, kuru izveidojām iepriekš (rīkjoslā), noklikšķinot uz tās, tiks atvērts jauns gtk logs, kas ļaus mums pievienot jautājumus mūsu datu bāzei:

app1

Lai izveidotu jaunu logu, mēs izveidosim jaunu klasi, kuru sauksim par jautājumiem un kā mūsu lietotņu klase izveidos jaunu logu (this.window = new Gtk.Window ();)

Mēs izmantosim dažus komponentus, lai secībā izveidotu grafisko saskarni;

-Label (jautājumi)

- Ieraksts (kur mēs uzrakstīsim jautājumu)

-Label (atbildes)

- 4 horizontālas rūtiņas, kurās būs ieraksts (atbilde) un slēdzis (lai izvēlētos, vai tas ir pareizs)

-Poga (lai pabeigtu)

Mēs varam redzēt, kā tas izskatās:

Uzņemiet no 2013. gada 12. septembra 08:01:07

Lai saglabātu jautājumu, mums būs jāiegūst ievadījumu teksts, tos iegūst ar get_text (), kas atgriež virkni.

app5

Lai uzzinātu, vai slēdzis ir aktīvs, mēs varam izmantot tā metodi get_active (), kas atgriež patieso vērtību, ja tā ir ieslēgta, un izlīdzina, ja tā ir izslēgta.

 50%, iesaldēšanas un nodošanas pogas:

 - piecdesmit%:

Attiecībā uz 50% mums ir tikai jāskatās, kura ir pareizā poga, un jānoņem 2, kas nav pareizi, šajā gadījumā mēs tos atceļam ar set_sensitive (false).

app4

Rezultāts:

app6

-Saldēt:

Mēs atkal iestatījām joslu uz 0.

this.timebar.set_fraction (0);

-Pasaule:

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

 Nākamā daļa (4):

Nākamajā maksājumā mēs redzēsim, kā uzlabot mūsu lietojumprogrammas aspektus, piemēram, jautājumus ne vienmēr parādās tajā pašā pozīcijā, ielieciet lietotnē ikonu ...


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   f3niX teica

    Man patīk atbildes ... haha ​​.. Sveicieni

  2.   panchomora teica

    Ļoti labi šie raksti par vala .. ceru, ka pārējie .. sveicieni

  3.   cr0t0 teica

    Es gaidu jūsu ierakstu par Valu, es ceru, ka būs daudz piegāžu. Priekā!

  4.   pptru teica

    Jauks raksts, paldies par dalīšanos.

  5.   Hiram teica

    Hello,

    Esmu ievērojis jūsu iepriekšējos ierakstus, lai izveidotu šo lietotni. Problēma rodas tagad, kad mēģinu piekļūt jaunā loga ieejām, es to daru šādā veidā, izmantojot createCuest klasē createQuestions (klase, kas izveido logu). .

    public void saveC () {
    virkne str = questionE.get_text ();
    stdout.printf ("Līgums% s \ n", str);
    }

    Bet pēc izejas es to saņemu:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: apgalvojums "GTK_IS_ENTRY (ieraksts)" neizdevās

    Līgums (nulle)

    Esmu redzējis dažus piemērus, un, definējot metodes, kas piekļūst ieejām, viņi dara kaut ko līdzīgu:

    void on_activate (Gtk. Ieraksta ieraksts) {
    nosaukums = ieraksts.get_text ();
    print ("\ nSveiki" + vārds + "! \ n \ n");
    }

    Bet viņiem ir tikai viens ieraksts, un šajā piemērā ir 5, tāpēc šeit es jau esmu pazudis, jūs varētu mani labāk vadīt.

    1.    lolbimbo teica

      Kad izveidojat ieejas, jums nav piešķirts tāds pats nosaukums, lai iegūtu tekstu, kuru jūs darāt:

      r1 = ieraksts1.get_text ();
      r2 = ieraksts2.get_text ();
      r3 = ieraksts3.get_text ();
      r4 = ieraksts4.get_text ();

      Ja vēlaties, ielieciet papīnu, un es to apskatīšu

      1.    Hiram teica

        lolbimbo, ja patiesībā man ir dažādi nosaukumi, bet testiem izmantoju tikai vienu, jo neviens no tiem neatgriež tekstu, ko ievietoju ierakstā, tas man nosūta iepriekš minēto kļūdu:

        Bet pēc izejas es to saņemu:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: apgalvojums "GTK_IS_ENTRY (ieraksts)" neizdevās

        Līgums (nulle)

        Es joprojām izmeklēju ...

        Priekā.!!

      2.    Hiram teica

        Gatavs šeit ir avots, sveicieni.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo teica

      Sveiks, Hiram, paskatieties, es jums pastāstīšu, kā jums tas jādara, lai to atrisinātu. Pirmā lieta notiek, jo mēs veidojam jaunu logu (tas nav galvenais), un, izsaucot ierakstu, ( atvainojos par vārdiem) Es nezinu, kāpēc šis sūds neatgriežas tā, it kā tas būtu ieraksts, bet gan logrīks, bet, hei, lai to atrisinātu, jums vienkārši jāmaina visi statiskie komponenti, kurus izveidojāt dinamiskiem, izmantojot var:

      var questionE = jauns Gtk.Entry ();

      tad funkcija darbosies, un jūs saņemsiet tekstu ieraksta iekšpusē.

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

      Visbeidzot, neaizmirstiet mainīt rindu, kurā pievienojat ierakstu, lai to parādītu:

      askE.show ();

      Es atstāju jums pilnu kodu ar modifikāciju, lai jūs varētu pārbaudīt, vai tas jau darbojas, tas ir, ja jums ir jāmaina visi elementi (vismaz ieraksti), lai turpinātu lietot.

      http://paste.desdelinux.net/5048

      Sveicieni

      1.    Hiram teica

        Chale, šeit atkal satraucos, man joprojām ir problēmas, kods, kuru jūs man parādāt, ir kārtībā, tikai gadījumā notiek kaut kas:

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

        Tas atrodas klasē Jautājumi, un tas darbojas labi, bet, ja vēlaties ievadīt no saveC, tas netiek apkopots, tas man iemet šo kļūdu:

        bu01.vala: 50.38-50.50: kļūda: Arguments 1: Nevar pārveidot no "Questions.saveC" uz "Gtk.Button.clicked"
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: brīdinājums: GTK.Stock ir novecojis kopš 3.10
        bu01.vala: 260.59-260.67: brīdinājums: GTK.Stock ir novecojis kopš 3.10
        Kompilācija neizdevās: 1 kļūda (-s), 2 brīdinājumi

        Es gribu domāt, ka tas notiek tāpēc, ka es nododu parametru, kad notiek klikšķa notikums:
        this.guardar.clicked.connect (this.guardarC);

        Jau iepriekš pateicos par atsauksmēm; šeit es atstāju kodu, kas izmet kļūdu: http://pastebin.com/pLzExhrb

      2.    lolbimbo teica

        Es to neesmu izmēģinājis, bet domāju, ka argumenta noņemšana no funkcijas to izmetīs.

        public void saveC (Gtk.Entry jautāE) {
        virkne str = questionE.get_text ();
        stdout.printf ("Līgums% s \ n", str);
        }

        a:
        public void saveC () {
        virkne str = questionE.get_text ();
        stdout.printf ("Līgums% s \ n", str);
        }

      3.    Hiram teica

        lolbimbo, esmu mēģinājis noņemt argumentu, un tas joprojām nedarbojas,

        Es joprojām cenšos izprast problēmu, Vala esmu jauns un nevaru atrast daudz dokumentācijas, es ceru drīz atrast risinājumu vai gaidīt, kamēr jūs izlaidīsit ceturto xD daļu.

        Es turpinu mēģināt ...

        Sveicieni.