2016-11-30 6 views
1

Ich arbeite mit QT Designer und erstelle meine GUIs damit. Um das Hauptprogramm zu starten, verwende ich diesen Code:QDialog direkt von der UI-Datei laden?

import sys 
from PyQt4 import uic, QtGui, QtCore 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 

except AttributeError: 
    def _fromUtf8(s): 
    return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 

except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    myWindow = MyWindowClass() 
    myWindow.show() 
    app.exec_() 

main_dialog = uic.loadUiType("GUI.ui")[0] 

class MyWindowClass(QtGui.QMainWindow, main_dialog): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 

     self.setupUi(self) 

if __name__ == "__main__": 
    main() 

Also mit dieser Linie main_dialog = uic.loadUiType("GUI.ui")[0] ich meine erstellt UI-Datei definieren.

Jetzt, wenn ich mit QDialogs arbeite, habe ich nur ausgeführt, indem sie zuerst erstellt, dann konvertiert sie in Python-Code (mit PYUIC4), dann implementieren den Code in meiner Haupt-Python-Datei und führen Sie den QDialog auf diese Weise:

def NameOfDialog(self): 
    dialog = Qdialog()    
    dialog.ui = NameOfDialogClass() 
    dialog.ui.setupUi(dialog) 
    dialog.exec_() 

Das offensichtliche Problem ist, dass, wenn ich eine kleine Änderung, die ich muss gehen durch den gesamten Prozess wieder auf die GUI machen (Umwandlung und den Code im Hauptcode setzen und achten Sie keine anderen Zeilen zu löschen, die ich hinzugefügt und müssen beibehalten werden).

Ich bin sicher, es gibt eine Lösung, um direkt auf die UI-Datei des QDialogs zu verweisen, aber wie? Ich habe versucht, die gleiche Methode wie ich für das Hauptfenster tun, aber ohne Erfolg :(

Dank

EDIT:

Hier ist, was ich in einem minimalen Beispiel versucht, aber es funktioniert nicht . Was bin ich

#-*- encoding: UTF-8 -*- 
import sys 
from PyQt4 import uic, QtGui, QtCore 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig,  _encoding) 

except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    myWindow = MyWindowClass() 
    myWindow.show() 
    app.exec_() 

main_dialog = uic.loadUiType("GUI.ui")[0] 

TestQDialog = uic.loadUiType("Dialog.ui")[0] 

class QDialogClass(object, TestQDialog): 
    def __init__(self, parent=None): 
     QtGui.QDialog.__init__(self, parent) 
     self.setupUi(self) 

class MyWindowClass(QtGui.QMainWindow, main_dialog): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 
     self.btn_close.clicked.connect(self.dialog) 

    def dialog(self): 
     dialog = Qdialog() 
     dialog.ui = QDialogClass() 
     dialog.ui.setupUi(dialog) 
     dialog.exec_() 

if __name__ == "__main__": 
    main() 
+0

Bitte senden Sie den Dialogcode, den Sie versucht haben und der nicht funktioniert hat. Der ganze andere Code in deiner Antwort ist irrelevant. – ekhumoro

+0

@ekhumoro Ich habe ein Beispiel des Codes hinzugefügt, den ich ausprobiert habe, aber definitiv nicht funktioniert :( – Khaled

Antwort

2

Ihre Dialogklasse sollte in genau der gleichen Weise wie Ihre Hauptfenster Klasse definiert werden ich es offensichtlich kann mich nicht testen, aber das Skript sollte wie folgt aussehen:.

import sys 
from PyQt4 import uic, QtGui, QtCore 

main_dialog = uic.loadUiType("GUI.ui")[0]  
TestQDialog = uic.loadUiType("Dialog.ui")[0] 

class QDialogClass(QtGui.QDialog, TestQDialog): 
    def __init__(self, parent=None): 
     QtGui.QDialog.__init__(self, parent) 
     self.setupUi(self) 

class MyWindowClass(QtGui.QMainWindow, main_dialog): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 
     self.btn_close.clicked.connect(self.dialog) 

    def dialog(self): 
     dialog = QDialogClass() 
     dialog.exec_() 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    myWindow = MyWindowClass() 
    myWindow.show() 
    app.exec_() 

if __name__ == "__main__": 
    main() 
Verwandte Themen