2017-12-17 11 views
0

Wenn ich ein Dialogfeld (QMainWindow) aus meinem Hauptfenster (QMainWindow) lade, wird es ohne Layout geladen, obwohl die setupUi() Funktion aufgerufen wird.PyQt5 Dialogfenster ohne Layout geöffnet

Die wichtigen Teile des Codes sind hier unten, click here für Pastebin Link zu vollständigen Code

class Ui_Dialog(QMainWindow): 
    def __init__(self, parent=None): 
     super(Ui_Dialog, self).__init__(parent) 
     self.setupUi(self) 
    def setupUi(self, Dialog): 
     ... 

class MainWindow(QMainWindow): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self.setupUi(self) 
     self.show() 
     .... 
    def setupUi(self, Form): 
     ... 
     self.auto_sap_btn = QPushButton(Form) 
     self.auto_sap_btn.setGeometry(QRect(0, 0, 61, 25)) 
     self.auto_sap_btn.setObjectName('auto_sap_btn') 
     self.auto_sap_btn.clicked.connect(self.openDialog) 

    def openDialog(self): 
     self.window = Ui_Dialog(self) 
     self.window.setupUi(self.window) 
     self.window.move(600, 500) 
     self.window.show() 

Gerade jetzt mein Dialog sieht wie folgt aus:

Fehlgeschlagen Dialog-Layout

Wenn ich den Dialog selbst aus einem eigenen Skript lade, erstellt von:

pyuic5 -x dialog.ui -o dialog.py 

sieht es wie folgt aus:

Proper Dialog-Layout

Was bin ich?

Antwort

1

Wenn Sie ein Design auf der Basis einer Vorlage in Qt Designer erstellen, dann, wenn Sie das entsprechende Widget passieren müssen, wenn Sie Ui_Dialog erstellt Ihnen verwendet sicher Dialog with Buttons Right so in diesem Fall, dass Sie einen QDialog statt QMainWindow verwenden sollte:

class Ui_Dialog(QDialog): # change QMainWindow to QDialog 
    def __init__(self, parent=None): 
     super(Ui_Dialog, self).__init__(parent) 
     self.setupUi(self) 
     [...] 

ein weiterer Fehler ist es, das setupUi() Verfahren ein zweites Mal zu verwenden, da diese Methode zum Ausfüllen des Widget verantwortlich ist, indem es 2 mal telefonieren Sie unnötig werden weitere Widgets hinzufügen:

def openDialog(self): 
    self.window = Ui_Dialog(self) 
    self.window.move(600, 500) 
    self.window.show() 
+0

Sie sind komplett ri ght. Ich habe das 2. mal total verpasst SetupUI wurde ran. Ich folgte diesem Tutorial (https://www.youtube.com/watch?v=dRRpbDFnMHI), und er verwendete QMainWindow, aber nach dem Ändern zu QDialog funktioniert es wie ein Zauber. Danke für die Hilfe! – Dutchman