2016-11-30 10 views
1

私はQT Designerを使用してGUIを作成します。メインプログラムを起動するには、私はこのコードを使用します。QDialogをUIファイルから直接ロードしますか?

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ファイルも直接参照できる解決策がありますが、どうすればよいですか?私は、メインウィンドウのためではなく、成功:(なしで行うように私は、同じ方法を試してみました

おかげ

EDIT:!ここ

は、私は、最小限の例で試みたものであるが、それは働いていません。?何を私はあなたのダイアログクラスは、あなたのメインウィンドウクラスとまったく同じように定義されている必要があり、私は明らかにそれを自分自身をテストすることはできません

#-*- 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() 
関連する問題