Bir Uygulama Oluşturma (Vala + GTK 3) [3. kısım]

Bu bölümde başka bir pencerenin nasıl oluşturulacağını ve GTK ile nasıl tasarlanacağını göreceğiz. Ayrıca soru ekleme ve üç düğmeyi kullanma (% 50, dondur ve geç) gibi bazı işlevler de göreceğiz.

ToolBar ve ToolButton

Bir Araç Çubuğu Oluşturun:

app2

Bir ToolButton oluşturma, bu durumda bir simge koyacağız (varsayılan olarak birçok simge bulabilirsiniz. burada) «from_stock (Gtk.Stock.IconName) ile:

2013-12-07 23:26:52 arası yakalama

Uygulamamızda üstte iki düğmeli bir çubuğumuz olduğunu görebiliriz, burada ilkini yeni sorular oluşturmak için ve ikincisini soruları içe aktarmak için (bir dosya aracılığıyla) kullanacağız:

2013-11-08 00:30:32 arası yakalama

Soru oluşturma:
Daha önce oluşturduğumuz buton (araç çubuğunda) üzerine tıkladığımızda, veritabanımıza soru eklememize izin verecek yeni bir gtk penceresi açacağız:

app1

Yeni bir pencere oluşturmak için, Sorular olarak adlandıracağımız ve Uygulama sınıfımızın nasıl yeni bir pencere oluşturacağı yeni bir sınıf oluşturacağız (this.window = new Gtk.Window ();)

Sırayla grafik arayüzü oluşturmak için birkaç bileşen kullanacağız;

-Etiket (Sorular)

- Giriş (soruyu yazacağımız yer)

-Etiket (yanıtlar)

- Giriş (cevap) ve Anahtar (doğru olup olmadığını seçmek için) içeren 4 yatay kutu

-Button (tamamlamak için)

Nasıl göründüğünü görebiliriz:

2013-12-08 01:07:08 arası yakalama

Soruyu kaydetmek için girişlerin metnini elde etmemiz gerekecek, bunlar bir dizge döndüren get_text () ile elde edilir.

app5

Bir Switch'in aktif olup olmadığını bilmek için metodunu kullanabiliriz get_active () açıksa true döndürür ve kapalıysa flase.

 % 50, Dondur ve Geç düğmeleri:

 -% elli:

% 50 için yalnızca doğru düğmenin hangisi olduğuna bakmalı ve doğru olmayan 2'yi kaldırmalıyız, bu durumda onları set_sensitive (false) ile iptal ederiz.

app4

Sonuç:

app6

-Donmak:

Çıtayı tekrar 0'a ayarladık.

this.timebar.set_fraction (0);

-Geçmek:

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

 Sonraki Bölüm (4):

Bir sonraki taksitte, uygulamamızın, soruların her zaman aynı konumda görünmemesi, uygulamaya bir simge koyması gibi yönlerini nasıl iyileştireceğimizi göreceğiz ...


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   f3niX dijo

    Cevapları seviyorum ... haha ​​.. Selamlar

  2.   Panchomora dijo

    Vala ile ilgili bu makaleler çok güzel .. Umarım diğerleri .. selamlar

  3.   cr0t0 dijo

    Vala'ya girişinizi beklemekteyim, umarım birçok teslimat olur. Saygılarımızla!

  4.   pptru dijo

    Güzel makale, paylaştığın için teşekkürler.

  5.   Hiram dijo

    Merhaba,

    Bu uygulamanın oluşturulması için önceki girişlerinizi takip ettim, sorun şimdi yeni pencerenin girişlerine erişmeye çalıştığımda ortaya çıkıyor, bunu createQuestions sınıfının (pencereyi oluşturan sınıf) saveC yönteminde bu şekilde yapıyorum .

    public void saveC () {
    string str = soruE.get_text ();
    stdout.printf ("Antlaşma% s \ n", str);
    }

    Ama çıktıda şunu anlıyorum:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion `` GTK_IS_ENTRY (entry) 'başarısız oldu

    Antlaşma (boş)

    Bazı örnekler gördüm ve girişlere erişen yöntemlerin tanımında şöyle bir şey yapıyorlar:

    void on_activate (Gtk.Entry girişi) {
    isim = entry.get_text ();
    print ("\ nMerhaba" + isim + "! \ n \ n");
    }

    Ama sadece bir girişleri var ve bu örnekte 5 tane var, bu yüzden burada zaten kayboldum, bana daha iyi rehberlik edebilirsin.

    1.    hahaha dijo

      Peki, girişleri oluşturduğunuzda, onlara sahip olduğunuz metni almak için aynı adı vermezsiniz:

      r1 = input1.get_text();
      r2 = input2.get_text();
      r3 = input3.get_text();
      r4 = input4.get_text();

      İstersen pastebin koy ve ben bakarım

      1.    Hiram dijo

        lolbimbo eğer aslında farklı adlara sahipsem, ancak testler için sadece bir tane kullanıyorum çünkü hiçbiri girişe koyduğum metni döndürmüyor, bana yukarıda belirtilen hatayı gönderiyor:

        Ama çıktıda şunu anlıyorum:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion `` GTK_IS_ENTRY (entry) 'başarısız oldu

        Antlaşma (boş)

        Hala araştırıyorum ...

        Şerefe. !!

      2.    Hiram dijo

        Kaynak burada hazır, selamlar.
        http://pastebin.com/pZG8GbrY

    2.    hahaha dijo

      Merhaba Hiram, bak, sana bunu çözmek için bunu nasıl yapman gerektiğini söyleyeceğim, ilk şey oluyor çünkü yeni bir pencere yaratıyoruz (bu ana pencere değil) ve girişi çağırırken, ( sözler için özür dilerim) Neden bu bok bir girdiymiş gibi dönmüyor ama bir Widget gibi dönmüyor, ama hey, onu çözmek için yarattığınız tüm statik bileşenleri var kullanarak dinamik olarak değiştirmeniz gerekir:

      var questionE = new Gtk.Entry ();

      daha sonra işlev çalışacak ve girişin içindeki metni alacaksınız.

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

      Son olarak, girişi eklediğiniz satırı göstermek için değiştirmeyi unutmayın:

      askE.show ();

      Halihazırda çalışıp çalışmadığını kontrol edebilmeniz için, yani uygulamaya devam etmek için tüm öğeleri (en azından girişleri) değiştirmeniz gerekiyorsa, değişiklikle birlikte kodun tamamını size bırakıyorum.

      http://paste.desdelinux.net/5048

      selamlar

      1.    Hiram dijo

        Chale, burada yine rahatsız oluyorum, sorun yaşamaya devam ediyorum, bana gösterdiğin kod iyi, sadece olayda bir şey oluyor:

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

        Sorular sınıfının içinde ve iyi çalışıyor ancak saveC'den girmek istendiğinde derleme yapmıyor, bana şu hatayı veriyor:

        bu01.vala: 50.38-50.50: hata: Bağımsız Değişken 1: `Questions.saveC 'den` Gtk.Button.clicked' e dönüştürülemiyor
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: uyarı: Gtk.Stock 3.10'dan beri kullanımdan kaldırıldı
        bu01.vala: 260.59-260.67: uyarı: Gtk.Stock 3.10'dan beri kullanımdan kaldırıldı
        Derleme başarısız oldu: 1 hata, 2 uyarı

        Bunun, click olayı gerçekleştiğinde parametreyi geçirme şeklimden kaynaklandığını düşünmek istiyorum:
        this.guardar.clicked.connect (this.guardarC);

        Geri bildiriminiz için şimdiden teşekkür ederiz; burada hatayı atan kodu bırakıyorum: http://pastebin.com/pLzExhrb

      2.    hahaha dijo

        Test etmedim ama argümanı işlevden kaldırmanın onu atacağını düşünüyorum.

        public void saveC (Gtk.Entry sorarE) {
        string str = soruE.get_text ();
        stdout.printf ("Antlaşma% s \ n", str);
        }

        a:
        public void saveC () {
        string str = soruE.get_text ();
        stdout.printf ("Antlaşma% s \ n", str);
        }

      3.    Hiram dijo

        lolbimbo, argümanı kaldırmayı denedim ve hala çalışmıyor,

        Hala sorunu anlamaya çalışıyorum, Vala'da yeniyim ve çok fazla belge bulamıyorum, umarım çözümü yakında bulur veya dördüncü bölüm xD'yi yayınlamanızı beklerim.

        Denemeye devam ediyorum ...

        Selamlar.