Forum: D Programlama Dili RSS
Gtkd zamanlama kullanımı
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 906 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Gtkd zamanlama kullanımı
Bu aralar biraz Gtkd öğrenmeye başladım. Yeterli derecede kaynak bulamadığım için PyGtk örneklerini D'ye aktarmaya çalışıyorum.

Örneğin şu örnek:

http://python-gtk-3-tutorial.readthedocs.io/en/latest/entr…

Benim yazdığım D örneği de şu şekilde oldu.
import gtk.Main;
import gtk.MainWindow;
import gtk.Button;
import gtk.Box;
import gtk.Entry;
import gtk.CheckButton;
import gtk.ToggleButton;
import glib.Timeout;
 
class Pencere: MainWindow
{
    Box yatayKutu, dikeyKutu;
    Entry giriş;
    CheckButton düzenlenebilir, görünür, kayan;
    Timeout zamanlama;
 
    this()
    {
        super("Giriş örneği");
        this.setSizeRequest(200, 100);
        dikeyKutu = new Box(Orientation.VERTICAL, 6);
        ekle(dikeyKutu);
 
        giriş = new Entry();
        giriş.setText("Merhaba Dünya");
        dikeyKutu.packStart(giriş, true, true, 0);
 
        yatayKutu = new Box(Orientation.HORIZONTAL, 6);
        dikeyKutu.packStart(yatayKutu, true, true, 0);
 
        düzenlenebilir = new CheckButton("Düzenlenebilir");
        düzenlenebilir.addOnToggled(&düzenlenebilirSeçildi);
        düzenlenebilir.setActive = true;
        yatayKutu.packStart(düzenlenebilir, true, true, 0);
 
        görünür = new CheckButton("Görünür");
        görünür.addOnToggled(&görünürSeçildi);
        görünür.setActive = false;
        yatayKutu.packStart(görünür, true, true, 0);
 
        kayan = new CheckButton("Kayan");
        kayan.addOnToggled(&kayanSeçildi);
        kayan.setActive = false;
        yatayKutu.packStart(kayan, true, true, 0);
 
        showAll();
    }
 
    void düzenlenebilirSeçildi(ToggleButton düzenlenebilir)
    {
        auto değer = düzenlenebilir.getActive();
        this.giriş.setEditable(değer);
    }
 
    void görünürSeçildi(ToggleButton görünür)
    {
        auto değer = görünür.getActive();
        this.giriş.setVisibility(değer);
    }
 
    void kayanSeçildi(ToggleButton kayan)
    {
        if (kayan.getActive())
        {
            giriş.setProgressPulseStep(0.2);
            zamanlama = new Timeout(100,&birşeyYap, false);
        }
        else
        {
            zamanlama.stop();
            giriş.setProgressPulseStep(0);
        }
    }
 
    bool birşeyYap()
    {
        giriş.progressPulse();
        return true;
    }
}
 
void main(string[] args)
{
    Main.init(args);
    new Pencere();
    Main.run();
}

Ama acaba zamanlama nesnelerini doğru kullanımı bu şekilde mi olacak.

glib.Timeout.d sınıfının kurucu işlevi şu şekilde:
this(uint interval, bool delegate() dlg, GPriority priority, bool fireNow=false)
{
    /* ... */
}
 
this(uint interval, bool delegate() dlg, bool fireNow=false)
{
    /* ... */
}
Python örneğinde None geçmiş ben de false geçtim.
    self.timeout_id = GObject.timeout_add(100, self.do_pulse, None)
Burada da user_data diye bir parametre geçmiş ama neden geçmiş anlamadım.
    def do_pulse(self, user_data):
        self.entry.progress_pulse()
        return True
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Python örneğindeki isimlerden tahmin ediyorum. timeout_add denen yerdeki anlam şu: Her 100 milisaniyede bir self.do_pulse'ı çağır; çağırırken de şu user_data'yı gönder. Yani oradaki None yerine herhangi bir bilgi verebileceğini ve do_pulse çağrıldığında o bilgiyi user_data olarak göreceğini sanıyorum.

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-08-16, 20:38:14 (UTC -07:00)