« geri

Asla Tavsiye Edilmez: GTK (+PyGTK)..!

Bir süredir nasıl da bir heyecanla uğraşıyordum projeyle... Amacım Rapidshare hesabına sahip kullanıcıların rahatlıkla dosya indirebilecekleri bir uygulama yazmaktı. Ana pencereyi Glade ile yaptım gayet güzel ve sade bir şekilde... Ufak ufak olayları yazmaya başladım. Daha sonra kodu Eclipse üzerine alarak biraz daha projemsi bir hale getirdim. Sonra sorunlar başladı....

Örneğin bir tuşa bastınız. Basılan tuşun olayını Glade ile ayarlayıp daha sonra bunu Python kodu içerisinden fonksiyonlara bağlayarak işinizi görebiliyorsunuz. Buraya kadar sorun yok... Help->About kısmına bir AboutDialog koymaya ve burada klasik anlamda bir Hakkında bilgisi vermeye çalıştım. Basitçe bunu da Glade içerisinde yapayım dedim. AboutDialog'u bir sınıf içerisine alarak, üst sınıfı genişleterek bir şeyler yapmaya başladım. Bu AboutDialog denen diyaloğun alt tarafında ön tanımlı olarak bir Kapatma tuşu geliyor. Ancak bu zımbırtıya bastığınızda pencere kapanmıyor.. Bu tuşlar, basıldığında pencerede bir tepki (response) yaratıyormuş. Bu tepkiyi bir fonksiyona ileterek pencereyi kapatmam gerektiğini öğrendim. Bunu öğrenebilmek için PyGTK'nın referans kitabına kaç saat, kaç gün baktığımı söylesem gülenler olacaktır. Ya tek istediğim gtk.RESPONSE_CLOSE tepkisinin oluşturulması durumunda pencerenin bir şekilde kapatılmasıydı... Hadi bunu da zar zor becerdim. Sinyal olarak bana -6 döndürüyor ve ben bunu gtk.RESPONSE_CLOSE ile karşılaştıramıyorum. Bir sürü IRC kanalına girdim, sorular sordum; cevap yok... Hele ki Türk'ler arasında bunu bilen bir Allah'ın kulu çıkmıyor, kafayı yememek elde değil..!

Bir başka şey.... Google Code Search'te falan bakıyoruz örnek kodlara.... Adam,

dialog.run()

dialog.destroy()

demiş altalta.... Yahu .destroy() pencereyi kapatıp, belleklerden silmez mi ?! O zaman amaç ne ? Hayır silmiyor....! Silmekle kalmıyor, bizim çalışmayan buton, bir anda aslan kesilip alıyor tepkiyi.. Basınca kapanıyor lanet olası pencere..

Aynı şekilde bir diyaloğu çalıştırmak için, .show_all(), .show(), .run(), .present() gibi metodlarımız var.. Zengin bir olay yani..... Okununca hangisinin ne işe yaradığı az çok anlaşılsa da, kullanılacak yerlerin net bir şekilde akılda kalması oldukça zor.....

Uzun lafın kısası... Bu gece PyGTK'dan da, GTK'dan da nefret ettim..... Bana QT diyecek olanlara da selam olsun... Eminim, daha farklı değildir..




işbaran
26.07.2007, 00:04

Hiçbir şey bilmediğin bir konuda nasıl bu kadar emin olabiliyorsun :) GTK ile Qt arasında benzerlik bile yok desem yeridir.
Bir denersen arayüz programlamanın Qt ile yapılması gerektiğini görüceksin ;) Sadece arayüz değil tabi ki, ister Qt ile C kullan, ister python ile pyqt kullan, bir butonu new Buton() diyip oluşturuyor, buton.close() diyip kapatiyoruz biz :D

Bora Güngören'
26.07.2007, 06:53

Vallahi QT'nin olay modeli çok daha kalabalık, çok daha zengin. Ancak grafik ara birim programlarken bilakis işe gelen bir şey bu. Çoğu kez "havalı" görsel davranışlar ardışık bir seri olayın işlenmesi ile oluyor. Tıpkı Mortal Kombat'da 10-15 darbeli "combo" yapmak gibi bir şey bu.

plac
26.07.2007, 08:13

@işbaran:
Kusura bakma ama sen da ondan farklı bir tavır sergilemiyorsun. PyGTK PyQT'ye nazaran daha olgun; özellikle dökümantasyon alanında.

@Alper:
Aradığım metod şu: http://www.pygtk.org/docs/pygtk/class-gtkwidget.html#method-gtkwidget--hide
Dierk Glade içindeki sinyal editöründen düğmenin basılma sinyalini bu hide metoduna bağlamak mümkün C ve Ruby için, Python için de bu şekilde çalışıp çalışmadığını bilmiyorum, denemedim.
Bu arada nesneye yönelik programlama da dikkat edilmesi gereken bir sınıfın üst sınıflarıdan metodları miras aldığını unutmayıp o sınıflarında dökümantasyonlarına bakmayı ihmal etmemek.

Tonguç Yumruk
26.07.2007, 08:48

And now for something completely different: wxPython

http://www.wxpython.org/

Not: İtiraf edeyim, ben hiçbir GUI kütüphanesini sevmem aslında.

Alper KANAT
26.07.2007, 10:41

İşin ilginci.. Bu yazıyı yazdıktan sonra herşeyi kapayıp başka işlere vermiştim kendimi... Sonra kafama esti, "yapıcam ulan" diyip bir daha saldırdım. 1 haftadır ara ara uğraşıp yapamadığım şeyi bir kaç dakikada hallettim, hatta başka şeyleri de bitirdim web sayfasını default tarayıcıda açmak gibi.. :) Bu sinir iyi geldi valla..

wxWindows'un daha zor olduğunu duymuştum ama..?

Pınar
26.07.2007, 14:42

ıhm... *parmaklarını katırdatır*

bence "gtk'dan, pygtk'dan nefret ettim" falan demek ya da böyle düşünmek çok yanlış (ki sen ruby-gtk'yı görsen pygtk'yı öpüp başına koyar, <i>oha adamlar gerekli herşeyin kütüphanesini yazmışlar, hayat ne garip vapurlar filan</i><i> dersin) .. ne diyordum.. ha, böyle demen bence yanlış çünkü gui tasarlarken bu aracı seçmek senin kendi seçimin.

gui tasarlarken qt mi gtk mı kararını vermek için şunu düşünmen gerekiyor bir programcı olarak; qt'nin sunduğu araçlar ortada; bir Glade'in ilkelliği ortada, qt'nin sunduğu onyüzmilyonbin kütüphane ortada; gtk'nın temel (ama sağlam) kütüphaneleri ortada.. lisans saçmalıkları gibi; senin bu programı yaparken büyük ihtimalle umursamayacağın şeyleri de geçersek;

-- qt kullanabilirsin; muhtemelen ihtiyacın olan her zamazingonun bir kütüphanesi falan vardır.. (halk arasındaki tabiriyle "kasmassın")
-- qt kullanabilirsin; çünkü seç-bırak tasarım araçları falan bir vijuul beyzik lezzetinde &amp; kolaylığında.

-- gtk kullanabilirsin; çünkü ihtiyacın olan zamanzingoları yazabilmek için elinde gereken temel kütüphaneler vardır. ve mevcut kalıplarla birşeyler yapmak yerine kendin zorlanıp, bu işi yapan kodu kendin yazarak, yine kendin tecrübe edinebilirsin.
-- gtk kullanabilirisn; çünkü glade denen süpersonik yardımcı aracın gelişmişliği sayesinde temel birtakım hammal gui işlemlerini araca yıktıktan sonra, kodun içine girmek ve tecrübe kazanmak sana kalmış.

sonuç: ben gtk kullanıyorum çünkü (idiot olmamın haricinde) programın/gui'nin yapabildiğim kadarıyla herşeyini kendim kodlamak ve öğrenmek istiyorum.

bir de karşılaştırma yapabilecek qt bilgim yok fakat, gtk bana daha stable geliyor (gelsin flame'ler :P)</i>

Pınar
26.07.2007, 14:43

onaylanmaması gereken yorum:

bi yerlerde italik tagını açık unuttum galiba, bi editleyiver benim yorumu ;)

plac
26.07.2007, 15:24

Merhaba,
Gerçi siz sorununuzu çözmüşsünüz ama http://www.pygtk.org/docs/pygtk/class-gtkdialog.html#method-gtkdialog--run adresinde run metodu bir değerle döndükten sonra dialogu silmek veya saklamak sizin sorumluluğunuzda diyor. Yani "dialog.run();
dialog.destroy()" dialogu göster, sonra kullanıcı bir şekilde kapatma butonuna bastıktan sonra (ki o zaman dialog.run()'dan dönüyor) dialogu sil diyor ve gayet mantıklı bir kod.

Alper KANAT
26.07.2007, 18:59

:) Pınar, hainlik olsun diye 2sini de direk onayladım.. Yaşasın kötülük..! Yorum için teşekkürler..! QT'yi merak etmiyor değilim. Özellikle Skype'ın beta sürümü ve LastFM ile acayip dikkatimi çekiyor. Hadi hayırlısı :)

plac
26.07.2007, 19:23

@pınar:
Glade 3'ün qt designer 4'den eksik kalan bir tarafı yok bence. Üstelik bu sürüm IDE'ler ile entegre de edilebiliyor (misal anjuta 2.2).

pinar
26.07.2007, 20:14

@plac

haklısın galiba, glade-2'den beri kurcalamamıştım glade'i (bi ara undo-redo'yu yapabiliceğim bir glade hayaliyle ağzımın suları akarak bekliyordum glade-3'ü, sonra hangi alemlere daldım meçhul..)

sonuç: üstelik gtk'nın taş gibi glade'i var :P

işbaran
26.07.2007, 23:59

@plac

eger son gordugum gunden beri dokumantasyon işine girdiyse gtk eminim qt ye yetişmiştir. bence hakkını yeme qt nin dokumantasyonunun

ikincisi kendi fikrimdir, sadece qt nin görünüşündeki incelik ve estetik qt secmek icin yeter. bir şeyler yapip ortaya pencere diye bi kalasın cıktıgını gormek oldukca moral bozuyordur heralde :)

Ömer Fadıl USTA
27.07.2007, 00:45

&gt;Hele ki Türk’ler arasında bunu bilen bir Allah’ın kulu çıkmıyor, kafayı yememek elde değil..!

Yaw bari hakkımızı verseydin 1 saat netten senin için kod araştırdık :D En azından uğraştılar deseydin. :P

plac
27.07.2007, 08:13

@işbaran:
Mehaba,
Qt (C toolkit) - Gtk (C toolkit) değil, PyGTK - PyQt'yi karşılaştırması yapmıştım. Takdir edersin ki örneğin PyQt kullanırken Qt dökümanlarına baş vurmak C bilen biri için bile tercih edilmez.

Bu arda bir kaç istatistik (Ubuntu Feisty'den (tüm depolar kuallanılarak)):
$ apt-cache rdepends python-gtk2 | grep -v python-gtk | grep -v python-gnome | grep -v python-glade | wc -l
158 #Not: Ubuntu sistem araçları da PyGTK kullanıyor ancak onları çıkarsak da yüksek bir sayı elde ederiz

$ apt-cache rdepends python-qt3 |grep -v python-qt | wc -l
21

$ apt-cache rdepends python-qt4 |grep -v python-qt | wc -l
12

$ apt-cache rdepends python-wxgtk2.6 | grep -v python-wx | wc -l
29

$ apt-cache rdepends python-wxgtk2.4 |grep -v python-wx | wc -l
9

hasan
22.08.2007, 14:02

Ben bir önceki yazını okuyunca, bu yazıyı neden yazdığını daha iyi anlıyorum. aşk başka iş başka ama aşkınıda böyle yerme istersen.

işbaran
09.09.2007, 11:17

@plac
selam,
bu yazının üstünden epey geçmişti şimdi rasladım tekrar :) sen de ola ki görürsen diye cevap yazayım :)

başta bahsettiğin dokumantasyon olayı şöyle, pyqt referansı qt referansının kopyası, zaman buldukca bu kopyaya python ile ilgili şeyler ekliyorlar işte constructer lari __init__ yapiyorlar filan, farklılıkları yazıyorlar, bunun dişinda tamamen ayni, ben de pyqt referansi dandik oldugundan direk asistanı açıp qt dokumantasyonuna bakiyorum. Yani oldukca tercih edilir :)
evet bu dokumanlar qt için pyqt degil ama pyqt ile qt nin bir farki yok dikkatini cekerim :))

ikincisi bazı bagimliliklari vermişsin galiba, tabi gnome kullanan biri icin qt nin bagimliliklari daha fazla olacaktir, ama kim gnome kullanir ki :D eüheühüe

görüşmek üzre tekrar raslarsam buraya :D

Mirat Can Bayrak
11.11.2007, 23:41

bende pygtk kasyorum kötümü ediyorum acep?

Alper KANAT
13.11.2007, 01:14

Bence kötü değil yaptığın... GNOME ve GTK programlarının ne kadar fazla olduğu düşünüldüğünde yanlış bir seçim olmadığını da düşünüyorum ben. Bu bakımdan bence devam etmelisin kesinlikle..

yavuz selim
09.10.2008, 10:50

Gözünü sevdiğimin Gtk'sı .. Taş gibi mubarek. insan onda erciyes dağının sağlamlığını (ama bir o kadar soğukluğunu) hissediyor. QT deniz gibi kaypak, her an dağılıp gidecek imajı veriyor. Seviyorum GTK/GNOME'u kardeşim. ne o troltech felan bizi bozar.

:
:
:
Giriş yapmamış kullanıcıların,
   » tüm yorumları moderasyondan geçer.