23 Nisan 2008 Çarşamba

Python ile QtXml sınıfını kullanmak


Bugün beni saatlerce uğraştıran küçük bir keşif bu. Keşif diyorum çünkü Qt'yi sadece Qt Designer'den kullanmış birisi olarak Qt referans belgeleri arasında kayboldum. Bulabildiğim tüm örnekler C üzerindeydi ve Qt ile xml parse işlemi yapan pek kimsenin olmadığını fark ettim. Herhalde başka kütüphaneler kullanıyorlar ama ben Qt diye tutturdum :) Hele PyQt ile xml parsing örneği bulabilen varsa allah rızası için bana adresini yazsın...

Aslında gerek kalmadı işin mantığını çözdüm, ama hala bana Python ve Qt ayrı dünyalarda gibi geliyor. Madem kimse yazmamış işte ben yazıyorum, Python'da Qt kütüphanesi ile nasıl XML Parse edilir.


XML Dosyası şöyle olsun;


<PISI>
<Distribution>

</Distribution>
<Package>

</Package>
<Package>

</Package>
</PISI>



Minik python kodu da şu;

#!/usr/bin/python


from PyQt4 import QtCore, QtXml

#Dosya'yı aç ve oku
f = QtCore.QFile("pisi-index.xml")
f.open(QtCore.QIODevice.ReadOnly)
heap = f.readAll()

#Xml nesnesi oluştur
xml = QtXml.QDomDocument()

#Xml içeriğini nesneye aktar.
#aktarınca parse edilmiş olacak
#geri dönüş değeri 4 adet değişken oluyor
#ve () içinde bu dönen değerler alınabiliyor
#ilk değişken parse işleminin başarı durumu
(success, msg, a,b) = xml.setContent(heap)
print success

#firstChild fonksiyonu adı üstünde
#ilk Xml düğümünü (node) yani root-node'u
#QDomNode nesnesi olarak döndürüyor
first = xml.firstChild()

#QDomNode nesnesinin nodeName fonksiyonu
#düğümün adını döndürüyor
print first.nodeName()

#ChildNodes ise bağlı düğümlerin bir
#listesini tutan QDomNodeList
#nesnesinin döndürüyor
childs = first.childNodes()

#Bu nesnenin at() fonksiyonuna verilen
#parametre kaçıncı düğümü döndüreceğini
#belirtiyor tabii ki dönen nesne de bir QDomNode
firstelement = childs.at(1)
print firstelement.nodeName()

Programı çalıştırınca çıktımız şöyle;

True
PISI
Package

Bu çıktıdan nelerle uğraştığımı da anlamış olabilirsiniz :) Ayrıca Qt ile ilgileniyorsanız ve Pardusunuzda Qt Asistan kuruluysa kendinize bir sürpriz yapın ve "qtdemo" komutunu çalıştırın.

21 Nisan 2008 Pazartesi

15 Nisan 2008 Salı

Pardus Seri İlanlar :D

PINP v0.1 Released- Pardus için İnternet Paylaşımı

Bir süredir üzerinde çalıştığım pinp sonunda görücüye çıktı.

Yaklaşık 1 aydır Python ve PyQt öğrenmek için ne yapabilirim diye düşünürken en kestirme yolun bir proje üzerinde çalışmak olduğuna karar verdim ve daha önceden "Pardus'da şu da olsa iyi olurdu" dediğim birkaç fikirden bir tanesi olan internet paylaşımı üzerine çalışmaya başladım.

Proje beklediğimden çabuk çalışır hale geldi. Pinp, bilgisayarınıza bağlı olan interneti ikinci bir ethernet kartınız varsa buna bağlı bilgisayarlara da paylaştırma işini tek tıklamayla yapmanızı sağlıyor. Ancak bu sürüm bir nevi Beta olduğundan henüz hata kontrolü veya durum bilgilendirme gibi özellikleri yok, ama denediğim kadarıyla işini iyi yapıyor.

Pardus ekibi bu yaz İnternet paylaşımı için bir staj projesi açıklamış. Umarım stajerler iyi iş çıkarır, o zamana kadar PINP ile idare edin.

Linux ile 1,5 yıl önce tanıştığımda acaba bende bir gün Linux için program yazabilir miyim? diye düşünmüştüm, her şey tahmin ettiğimden çok daha hızlı gelişti. Bu özgür yazılım ve açık kaynak Dünyası gerçekten çok eğlenceli bir yermiş.

Proje Adresi: http://sourceforge.net/projects/pinp/