2016-11-30 62 views
1

我使用QT Designer並使用它創建我的GUI。要啓動主程序,我用這個代碼:直接從UI文件加載QDialog?

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() 

所以這條線main_dialog = uic.loadUiType("GUI.ui")[0]我定義我創建的UI-文件。

現在,當我使用QDialogs時,我只通過首先創建它們,然後將它們轉換爲Python代碼(使用PYUIC4),然後在我的主python文件中實現代碼並以這種方式運行QDialog來完成它們:

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

明顯的問題是,每當我做任何微小的變化給GUI我不得不再次去完成整個過程(轉換,並把代碼中的主代碼並注意不要刪除任何其他行,我添加並需要維護)。

我確定有一種解決方案可以直接引用QDialog的UI文件,但是如何?我想同樣的方法就像我的主窗口,但沒有成功:(做

感謝

編輯:

以下是我在一個小例子,都試過了,但它不工作。我是什麼失蹤

#-*- 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

請發佈您嘗試的對話框代碼,哪些不起作用。答案中的所有其他代碼都是無關緊要的。 – ekhumoro

+0

@ekhumoro我添加了我試過的代碼樣本,但肯定不能工作:( – Khaled

回答

2

對話框類應以完全相同的方式爲你的主窗口類中定義我顯然不能測試它自己,但腳本應該是這樣的:?

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()