@LenardZill: Verwendung: `QMainWindow` für das Hauptfenster, `QDialog` für Dialoge, und `QWidget` für Fenster die weder Hauptfenster noch Dialog sind und für die es keine passendere, spezialisierte Klasse gibt. Was die Klassen jeweils bieten und wofür man sie einsetzt steht in der Qt-Dokumentation zu diesen Klassen ziemlich ausführlich beschrieben.
Für Dein Code-Beispiel müsstest Du den Signal/Slot-Mechanismus von Qt verwenden um auf die Benutzereingabe zu reagieren und das nächste Fenster zu öffnen. Also irgendein passendes Signal mit einer Funktion oder Methode verbinden, welche dann das nächste Fenster öffnet.
*So* wird das übrigens nicht funktionieren, denn Dein `Main.__init__()` erwartet ein Argument, welches Du aber beim Aufruf gar nicht übergibst.
Das ``as`` beim Import ist übrigens unschön. Abkürzungen sollte man vermeiden, solange sie nicht allgemein bekannt sind. Ich sehe hier den Sinn auch nicht so ganz. Man kürzt mit ``as`` in ein paar Fällen einen Namen ab, wenn man den wirklich sehr oft benötigt, aber dieses `Frm` wird im weiteren Quelltext nur ein einziges mal verwendet. Da hat man also überhaupt keinen Gewinn von, das man den Quelltext unleserlicher macht.
Mit `PyQt4` würde ich ausserdem keinen generierten Quelltext verwenden. Diese Qt-Anbindung hat ein Modul mit dem Namen `PyQt4.uic` mit dem man die GUI-Daten zur Laufzeit einlesen und in Objekte umwandeln kann. Damit spart man sich den Zwischenschritt der Quelltextgenerierung und auch etwas „Boilerplate”-Quelltext. Dein Quelltext könnte dann ungefähr so aussehen:
Code: Alles auswählen
import sys
from PyQt4 import QtGui, uic
def main():
app = QtGui.QApplication(sys.argv)
widget = uic.loadUi('main_form.ui')
widget.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Man kann `loadUi()` auch eine Qt-Klasse (oder eine davon abgeleitete) mitgeben, von der dann ein Exemplar erstellt wird und das UI dann „darin” erstellt wird, um einen ähnlichen Effekt wie den von Deinem Klassenbeispiel zu bekommen.