Ui Dosyalarıyla Doğrudan Çalışmak

Merhaba arkadaşlar;

Sizlere Qt’nin sunmuş olduğu QUiLoader aracının kullanımından bahsetmek istiyorum. Masaüstü uygulamalar için grafiksel arayüz geliştirirken hızlı sonuç alabilmeniz ve zaman kazanmanız için oldukça etkili bir araç. QtDesigner ile tasarladığınız arayüzü, Python koduna convert etmeden doğrudan kullanmanıza olanak sağlıyor (Aslında siz el ile convert etmeseniz bile QUiLoader arkada bu işi yapıyor).

Kaynak: https://doc.qt.io/qtforpython/tutorials/basictutorial/uifiles.html

Kullanımına örnek bir kod:

import sys
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QFile

if __name__ == "__main__":
	# Uygulama olusturuyoruz.
    uygulama = QApplication(sys.argv)

    # Bir yükleyici nesnesi oluşturuyoruz
    yukleyici = QUiLoader()

    # Tasarım dosyasını yükleyiciye 'yüklüyoruz'
    pencere = yukleyici.load("tasarim.ui")
    # Eğer tasarim dosyasi alt dizinlerde ise soyle yapabilirsiniz:
    # "altDizin1/altDizin2/altDizin3/tasarimDosyasi.ui"

    # Son olarak tasarımı 'gösteriyoruz'
    pencere.show()

    # Pencere kapatıldığında 'Uygulama'dan çıkılıyor.

    sys.exit(uygulama.exec_())

Şimdi tasarım dosyası üzerinde bir takım değişiklikler yapalım. Bir label oluşturup text’ini boş bırakalım, ardından Python ile değiştirelim. QLabel nesnelerinin text’ine ulaşmak için text() metodunu, değiştirmek için ise setText() metodunu kullanabilirsiniz.

import sys
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QFile

if __name__ == "__main__":
	# Uygulama olusturuyoruz.
    uygulama = QApplication(sys.argv)

    # Bir yükleyici nesnesi oluşturuyoruz
    yukleyici = QUiLoader()

    # Tasarım dosyasını yükleyiciye 'yüklüyoruz'
    pencere = yukleyici.load("tasarim.ui")
    # Eğer tasarim dosyasi alt dizinlerde ise soyle yapabilirsiniz:
    # "altDizin1/altDizin2/altDizin3/tasarimDosyasi.ui"

    # label objesinin text'ini değiştiriyoruz.
    pencere.label.setText("Merhaba!")

    # Son olarak tasarımı 'gösteriyoruz'
    pencere.show()

    # Pencere kapatıldığında 'Uygulama'dan çıkılıyor.

    sys.exit(uygulama.exec_())

Bu kez bir ekleme yapalım. Bir Push Button ekleyip fonksiyonelliğini pencereyi kapatmak olarak belirleyelim. Burada Signals and Slots konusuna da biraz değineceğim.

import sys
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QPushButton
from PySide2.QtCore import QFile

if __name__ == "__main__":
	# Uygulama olusturuyoruz.
	uygulama = QApplication(sys.argv)

	# Bir yükleyici nesnesi oluşturuyoruz
	yukleyici = QUiLoader()

	# Tasarım dosyasını yükleyiciye 'yüklüyoruz'
	pencere = yukleyici.load("tasarim.ui")
	# Eğer tasarim dosyasi alt dizinlerde ise soyle yapabilirsiniz:
	# "altDizin1/altDizin2/altDizin3/tasarimDosyasi.ui"

	# label objesinin text'ini değiştiriyoruz.
	pencere.label.setText("Merhaba")

	# Bir QPushButton nesnesi oluşturup pencere üzerine ekliyoruz
	pushButton = QPushButton("Pencereyi Kapat", pencere)

	# Butona tıklandığında yapacağı işi bir fonksiyon aracılığı ile belirliyelim
	pushButton.clicked.connect(lambda : pencere.close())

	# Son olarak tasarımı 'gösteriyoruz'
	pencere.show()

	# Pencere kapandığında 'Uygulama'dan çıkılıyor.

	sys.exit(uygulama.exec_())

Çoğu sınıfın kendine özgü sinyalleri vardır. Bu sinyaller yuvalara bağlanır. Esasında QPushButton clicked sinyaline sahip değil. QPushButton, QAbstractButton'ı miras aldığı için bu sinyali kullanmaya hak kazanıyor. connect() metodu da gelen sinyali bir yuvaya yani lambda : pencere.close() fonksiyonuna bağlıyor.

Kaynak:
QAbstractButton,
QPushButton

Burada pencereyi kapatmak için close() metodu yerine destroy() metodunu da kullanabilirdik. Ancak bunu yapsaydık, sadece o anki pencereyi ‘yok etmiş’ olurduk. Yani uygulama (QApplication() nesnesi) hala yaşardı.

“Dur! Seninle henüz işim bitmedi.” gibi bir şey demiş oluyoruz.

Tüm bu değişiklikler programınız çalıştığı sürece görülebilecek. Tasarım dosyası olduğu gibi kalır, işin güzel yanı da bu zaten. Tasarım dosyalarının bağımsız olması.

Umarım anlattıklarımın sizlere yardımı dokunur.

İyi çalışmalar, sağlıklı günler dilerim.

4 Beğeni