2016-11-30 33 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()