2017-04-14 3 views
1

これはmdiWindowです。 openChildWindowアクションが新しい子ウィンドウを開きます。しかし、クラスの代わりにインポートを使用しようとしています。私はちょうど長いコード行の代わりにコード行を短くしたい。私はchild2.pyの部分だけmain.pyの部分を使用しようとしていますが、動作しません。 import child2.pyは新しいmdiChildWindowを作成しません。Python3 import module.py main.pyのコード部分

main.py

import sys, time 
from PyQt5 import uic 
from PyQt5.QtWidgets import QMainWindow, QApplication 

class MainWindow(QMainWindow): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     uic.loadUi("mainWindow.ui",self) 

     self.actionChildWindow.triggered.connect(self.openChild)   
     self.actionChildWindow2.triggered.connect(self.openChild2) 

    def openChild(self): 
     childWindow=openChild("child.ui") 
     childWindow.add(self.mdiArea) 

    def openChild2(self): 
     import child2 
     child2.childWindow2=openChild2("child2.ui") 
     child2.childWindow2.add(self.mdiArea) 

class openChild(QMainWindow): 
    def __init__(self,modul): 
     super().__init__() 
     uic.loadUi(modul,self) 

    def add(self,addToMainWindow): 
     addToMainWindow.addSubWindow(self) 
     self.show() 

def main(): 
    app = QApplication(sys.argv) 
    ex = MainWindow() 
    ex.show() 
    sys.exit(app.exec_()) 

if __name__ =='__main__': 
    main() 

child2.py

class openChild2(QMainWindow): 
    def __init__(self,modul): 
     super().__init__() 
     uic.loadUi(modul,self) 

    def add(self,addToMainWindow): 
     addToMainWindow.addSubWindow(self) 
     self.show() 
+0

申し訳ありませんが、私は本当にあなたの質問を理解していない、少し明確に説明しようとすることができますか? – Scheme

+0

actionChildWindowは動作していますが、actionChildWindow2は機能しません。 – Aruz

答えて

0

わかりましたので、あなたのコードでいくつかの問題をtheresの。私はあなたが話しているのは、特にchild2.pyのインポートに関する問題だと思います。

def openChild2(self): 
    import child2 
    child2.childWindow2=openChild2("child2.ui") 
    child2.childWindow2.add(self.mdiArea) 

が本当に何をやるべきことは、あなたの他の輸入のようなファイルの先頭にインポートされます。あなたの問題は、あなたがこのような関数の内部でインポートしようとしているということです。あなたは1つのクラスだけをインポートしているので、私はこのためにfrom構文を使用するのが好きです。あなたのmain.pyファイルにクラスが定義されているように、openChild2を使用することができます。

関連する問題