İki ana fark vardır:
- yükleme açısından, QUiLoader teorik olarak biraz ek yük ekler, çünkü her seferinde kullanıcı arayüzünü oluşturması gerekir, yani XML dosyasını ayrıştırması, düğüm yapısını oluşturması ve ardından kullanıcı arayüzünü tüm içeriğiyle oluşturması gerekir; bunun yerine uıc dosyası, yukarıdaki ilk iki adımı atlayarak doğrudan kullanıcı arayüzünü oluşturur;
- QUiLoader yalnızca UI dosyasına dayalı yeni bir widget oluşturabilirken, uıc yöntemi zaten var olan bir temel widget'ı kullanmanıza izin verir ve alt widget'lar buna eklenebilir;
İkinci nokta muhtemelen en önemlisidir: Quiloader'ı kullanarak, yüklenen UI için doğrudan alt sınıflamayı kullanamazsınız.
Örneğin, Designer'da bir ana pencere oluşturursanız, QUiLoader yeni bir QMainWindow döndürür. Aşağıdakileri yapamazsınız (veya en azından yapmamalısınız):
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
ui_file = QFile("mainwindow.ui")
ui_file.open(QFile.ReadOnly)
loader = QUiLoader()
window = loader.load(ui_file, self)
Ve döndürülen nesneyi aşağıdaki gibi merkezi bir widget olarak yapmaya bile çalışmamalısınız:
self.setCentralWidget(window)
çünkü sonuç, bir Qmainwindow'un içinde, önerilmeyen ve desteklenmeyen bir Qmainwindow'a sahip olmak olacaktır ve ayrıca bir Qmainwindow'un standart özelliklerini (genellikle rıhtımlar ve araç çubukları) kullanırken sorun yaratabilir.
Tek alternatif, Tasarımcıda temel bir form widget'ı oluşturmak ve bunu merkezi widget olarak kullanmak, menülerin, rıhtımların ve araç çubuklarının kod tarafından oluşturulması gerektiğidir.
PySide için, tam alt sınıflamaya izin veren tek olasılık, pyside-uıc yöntemini kullanmak ve sonunda çoklu devralmayı kullanmaktır (ancak kompozisyon yine de geçerli bir alternatif olduğu için bu bir gereklilik değildir):
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
Öte yandan, PyQt şunları sağlar: loadUi
aslında ne yapan işlev setupUi
ikinci argüman ana widget değil, widget'ın kendisi olduğundan ve kullanıcı arayüzünün içeriği buna yükleneceğinden:
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
uic.loadUi("mainwindow.ui", self)
Bildiğim kadarıyla, PySide henüz benzer bir şey sunmuyor.
Zamanında uı yükleme zaten iki konu var, unutmayın ve her iki bağlamaları için :
- UI dosyası bozuk veya geçersizse veya sürüm uyuşmazlığı nedeniyle desteklenmeyen özelliklere/özelliklere sahipse, düzgün yüklenmeyebilir veya hatta çökebilir, önceden akıl sağlığı denetimi yoktur;
- bir IDE kullanırken, yalnızca çalışma zamanında yüklendiklerinden uı nesneleri için kod tamamlama yoktur;
Bunlar önemli konular değil, ama yine de onların farkında olmak önemlidir.