2
Mar

Bildiğiniz gibi form/widget tasarımlarınızı qt designer üstünde yapıp bir ui dosyası elde edebiliyorsunuz. Bu ui dosyasını da “pyuic4 uidosyası.ui -o pydosyası.py” gibi bir komutla python dosyasına çevirebiliyorsunuz. Fakat her düzenleme yaptığınızda bunu py dosyasına dönüştürmek tam bir çile. Bunun için uic modülünü kullanabilirsiniz. Bunun sayesinde ui dosyalarını çevirmeye gerek kalmadan direkt olarak kullanabiliyoruz. Hemen bir örneğe göz atalım:

from PyQt4 import QtGui, QtCore, uic # gerekli modüller
 
class form(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self)
        uic.loadUi("ui/form.ui", self) #ui klasörünün içindeki form.ui dosyasını yüklettirdik.

Form üzerindeki bir forma self.button olarak ulaşabilirsiniz. “self.” olmasının sebebi ikinci paranametreye self dememiz.

self.ui = uic.loadUi("ui/form.ui")

Bu şekilde ise form üzerindeki butona self.ui.button şeklinde ulaşabilirsiniz.

Acaba bu yöntemin performansı kötü etkiliyen bir yönü var mı, bilmiyorum. Ama siz program üzerindeki çalışmalarınızı bu şekilde yapıp sürüm çıkarmadan önce py dosyalarına çevirerek de kullanabilirsiniz.

27
Eyl
İlk olarak şimdiye kadar hiç bir bilgimin olmadığı "Qt" hakkında internette bilgi toplamaya başladım. Genelde grafiksel arayüz tasarımında kullanıldığını öğrendim. Ardından paket yöneticisinden Qt demo isimli yazılımı indirdim. Qt ile neler yapılabileceğini bu yazılımı karıştırarak öğrendim.

Bu ve buna benzer birkaç kısa bir bilgi edindikten sonra Qt'yi kendim deneyip öğrenmem gerektiği kanısına vardım ve bunu da Qt designer yazılımıyla yapabileceğime karar verdim. Hemen paket menajerinde aratıp bilgisayarıma kurdum.


Qt designer'ı çalıştırdığımda karşıma ilk olarak New Form isimli pencere geldi. İstenilen form (main window/widget vs) seçildikten sonra layout kullanarak veya elle objeleri forma yerleştirdim Bu objeleri forma yerleştirirken sadece sürükleyip bırakmak yeterli oluyor. Formun görünümü bittikten sonra kaydettim. Oluşan dosya .ui uzantılı(user interface) bir dosyaydı. Dosyayı kwrite ile açıp nasıl kaydedildiğini inceledim.Dosya xml formatında kaydedilmişti.

Qt designer'da kullandığımız her objenin özelliklerini (size , font, text vs) Property Editor'de
belirtebiliriz. Bu objenin özelliklerine oluşan ui uzantılı dosyayı metin düzenleyicisiyle açıp bakabiliriz.
Fakat oluşan ui dosyası sadece objelerini text , visible/invisible , font ,size gibi özellikleri tutması yetmezdi. Bu nesneler istenilen herhangi bir durumda oluşan olay karşısında tepki vermesi gerekmekteydi. Programı biraz karıştırdıktan sonra edit menüsünde signals/slots ile yapılabileceğimi buldum(Bu moda F4 tuşuyla da geçilebilir). Objeler arasında ilişkiyi kurdum ve kaydettim. Oluşan dosyayı kwrite ile açtım. Oluşturduğum 2 dosya arasında etiketinde bir farklılık oluştu.

pushButton
clicked()
radioButton
click()


Burada sinyali oluşturacak nesne pushButton nesnesidir. Bu nesnenin sinyali ise clicked()'dir. Bu sinyale bağlanan yuvanın nesnesi de radioButton , yuva ise click()dir. Yani pushButton nesnesi tıklandığında radioButton nesnesinin click fonksiyonu çalıştırılacak.

Buraya kadar Qt nesneleri , Qt designer yazılımına giriş yaptım. Service managerın kaynak kodlarını az da olsa Qt nesneleri hakkında bilgi edindikten sonra indirmeyi düşündüm. Bu dosyaları indirdikten sonra ui klasörünün içindeki dosyaları Qt designer ile açıp xml formatlı dosyalar ve python dosyaları arasındaki ilişkiyi anlamaya çalışacağım.