23 Nisan 2009 Perşembe

uitopy (pyqt için pyuic otomatı)

qt4 designer ile çalıştığımızda .ui uzantılı tasarım dosyaları oluşturuyoruz biliyorsunuz. bunları pyqt ile kullanmak için pyuic4 dosya.ui -o pythondosya.py şeklinde bir komut kullanmamız gerekiyor. tasarımda yapacağımız değişiklikleri dosya.ui dosyasında gerçekleştirdikçe bu komutu verip derleme işlmini gerçekleştirmemiz gerkiyor. bu, özellikle uzun vadede ve çok sayıda ui dosyasıyla çalışıyorsak çok can sıkıcı bir hal alıyor. bu konuda işimi kolaylaştırmak için uitopy adlı (isim iddialı olmuş ütopya'yı çağrıştırıyor) bir python programcığı yazdım. bunu pyqt projemizin dizinine atıp çalıştıdrığımızda, dizinin içindeki tüm ui dosyalarına pyuic komutuyla dönüştürm işlemi gerçekleştiriyor. şöyle bir şey;
import os ,glob

for dosya in glob.glob("*.ui"):
os.system("pyuic4 " + dosya + " -o " + dosya[0:(len(dosya)-3)] + ".py")
print str(((glob.glob("*.ui")).index(dosya))+1) + "- " + dosya
print "\n" + str(len(glob.glob("*.ui"))) + " files converted"

bu arada, bu glob kütüphanesi gerçekten de çok işe yarıyor.

23 nisan enerjisiyle geliştirmeye hız kesmeden devam ettim. şimdilik bu. bir de arayüz yazmayı planlıyorum. aslında arayüz yazmak da biraz saçma, belki kde servis menüsü felan da olabilir. hadi bakalım.

uitopy'miz önceki haline göre bayağı gelişti. artık sadece ui dosylarını python dosyasına çevirmekle kalmıyor. bir de baslatici dosya oluşturuyor. orada ana pencere class'ından nesne türetiyor. init metodunu yazıyor bu başlatıcı dosyaya. yani başlangıç seviyesindeki pyqt kullanıcıları için angarya olan ne varsa yapıyor.
import os ,glob, re
from time import gmtime, strftime

dosyalar = []
siniflar = []
baslatici = "calisan"
anapencerehangisi = -1

for dosya in glob.glob("*.ui"):
dosyalar.append(dosya)
os.system("pyuic4 " + dosya + " -o " + dosya[0:(len(dosya)-3)] + ".py")
print str(((glob.glob("*.ui")).index(dosya))+1) + ") " + dosya
print "\n" + str(len(dosyalar)) + " files converted"

for i in range(len(dosyalar)):
f = open((dosyalar[i])[0:(len(dosya)-3)] + ".py", "r")
metin = f.read()
bas = re.search('class ', metin).end()
son = re.search('\(', metin).start()
f.seek(bas)
siniflar.append(f.read(son-bas))
if siniflar[i] == "Ui_MainWindow":
anapencerhangisi = i
f.close()

if os.path.isfile(baslatici + ".py") == 0:
f = open(baslatici + ".py","a+")
veri = "# -*- coding: utf-8 -*-\n\
# generated using 'uitopy' - mustafa yilmaz (penguen@linux.erciyes.edu.tr)\n"
veri += "# " + strftime("%d %m %Y - %H:%M:%S", gmtime())
veri += "\n\nimport sys\n\
from PyQt4 import QtCore, QtGui\n"
for i in range(len(dosyalar)):
veri += "from " + (dosyalar[i])[0:len(dosya)-3] + " import " + siniflar[i] + "\n\n"
veri += "class StartQT4(QtGui.QMainWindow):\n\
def __init__(self, parent=None):\n\
QtGui.QWidget.__init__(self, parent)\n\
self.ui = Ui_MainWindow()\n\
self.ui.setupUi(self)\n\
#QtCore.QObject.connect(self.ui.pushButton,QtCore.SIGNAL('clicked()'), self.fonksiyon)\n\
\n\n\n\
def main():\n\
app = QtGui.QApplication(sys.argv)\n\
program = StartQT4()\n\
program.show()\n\
sys.exit(app.exec_())\n\
\n\
if __name__ == '__main__':\n\
main()\n"
f.write(veri)
f.close()

os.system("python " + baslatici + ".py")

Hiç yorum yok:

Yorum Gönder