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:
Bir ToolButton oluşturma, bu durumda bir simge koyacağız (varsayılan olarak birçok simge bulabilirsiniz. burada) «from_stock (Gtk.Stock.IconName) ile:
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:
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:
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:
Soruyu kaydetmek için girişlerin metnini elde etmemiz gerekecek, bunlar bir dizge döndüren get_text () ile elde edilir.
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.
Sonuç:
-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 ...
Cevapları seviyorum ... haha .. Selamlar
Vala ile ilgili bu makaleler çok güzel .. Umarım diğerleri .. selamlar
Vala'ya girişinizi beklemekteyim, umarım birçok teslimat olur. Saygılarımızla!
Güzel makale, paylaştığın için teşekkürler.
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.
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
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. !!
Kaynak burada hazır, selamlar.
http://pastebin.com/pZG8GbrY
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
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
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);
}
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.