2012-04-18 14 views
11

so erstellen ich eine einfache Windows-Anwendung mit Python und PyQt4. Ich habe meine Benutzeroberfläche so gestaltet, wie ich es in QtCreator haben möchte, und ich habe die erforderliche .py-Datei aus der .ui-Datei erstellt. Wenn ich versuche tatsächlich eine Instanz des Fensters zu öffnen jedoch bin ich der folgende Fehler gegeben:PyQt4 Problem beim Erstellen einer einfachen GUI-Anwendung

AttributeError: 'Window' object has no attribute 'setCentralWidget' 

Also gehe ich zurück in die ui_mainwindow.py Datei und kommentieren Sie die folgende Zeile aus:

MainWindow.setCentralWidget(self.centralWidget) 

Jetzt, wenn ich main.py ausführe, wird es eine Instanz des Fensters erzeugen, aber es verliert sein Gitter-Layout und die UI-Elemente schweben einfach dort. Irgendeine Idee, was ich falsch mache?

Meine main.py Datei:

import sys 
from PyQt4.QtGui import QApplication 
from window import Window 

if __name__ == "__main__": 

    app = QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 

und meine window.py Datei:

from PyQt4.QtCore import Qt, SIGNAL 
from PyQt4.QtGui import * 

from ui_mainwindow import Ui_MainWindow 

class Window(QWidget, Ui_MainWindow): 

    def __init__(self, parent = None): 

     QWidget.__init__(self, parent) 
     self.setupUi(self) 

Antwort

20

Sie müssen von QMainWindow erben, nicht QWidget. setCentralWidget ist eine Methode von QMainWindow.

from PyQt4.QtCore import Qt, SIGNAL 
from PyQt4.QtGui import * 

from ui_mainwindow import Ui_MainWindow 

class Window(QMainWindow, Ui_MainWindow): 
    def __init__(self, parent = None): 

     QMainWindow.__init__(self, parent) 
     # or better 
     # super(Window, self).__init__(parent) 

     self.setupUi(self) 
Verwandte Themen