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/entry.html
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
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply