@stockie
Natürlich kann Dir keiner vorschreiben, wie Du den uic-Loader benutzt, ob über pyuic hardkodierend oder dynamisch zur Laufzeit, trotzdem bietet letzteres gewisse Vorteile:
Du sparst Dir die Umwandlung pyuic bla.ui > bla.py, d.h. Du kannst im Designer Dein Gui-Layout ändern und mit diesen Änderungen sofort arbeiten, was gerade dem Anspruch einer dynamischen Scriptsprache entgegen kommt (aber selbst in C++ und Qt ist das der "Goldstandard").
Nachteile sehe ich hier eigentlich keine, so ist z.B. die Laufzeitgenerierung der Gui-Klasse zeitlich vernachlässbar klein, und nötige nachträgliche Änderungen am Quelltext der pyuic-Klassen ist eher ein Hinweis auf ein falschen Lösungsansatz. Sollten diese Änderungen dennoch nötig sein, so geht das auch in Deiner Gui-Basisklasse, da diese den Gui-Entwurf erbt.
Bsp. für dynamisches Laden der ui-files (aus Riverbank-Doku):
Code: Alles auswählen
form_class, base_class = uic.loadUiType("demo.ui")
class DemoImpl(QtGui.QWidget, form_class):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
self.setupUi(self)
Das obige Bsp. verhält sich so, wie eine Mehrfachvererbung mit Deiner Ui_ Klasse aus der pyuic-generierten Datei anstelle form_class.
Noch einfacher gehts, wie cofi gepostet hat, wobei hier die Basisklassen Deiner Klasse und der ui-Datei identisch sein müssen.