2017-11-19 6 views
0

Qt Creatorを使用して作成したUIファイルがあります。 PyCharmを使ってアプリケーションを実行すると、メインウィンドウが短く開いて閉じます。私はそれがガベージコレクションされていると仮定しますが、私はこれをどのように動作させるかわかりません。何か案は?QMainWindowを開いたままにするにはどうすればいいですか?

Calculator.py

from PyQt5.QtWidgets import QApplication 
import MainWindow 
import sys 


class Calculator(QApplication): 

    def __init__(self): 
     args = sys.argv 
     QApplication.__init__(self, args) 
     self.initializeApplication() 

    def initializeApplication(self): 
     app = MainWindow.MainWindow() 
     app.show() 


if __name__ == '__main__': 
    app = Calculator() 
    sys.exit(app.exec_()) 

MainWindow.py

from PyQt5 import uic 
from PyQt5.QtWidgets import QMainWindow 


class MainWindow(QMainWindow): 

    def __init__(self): 
     QMainWindow.__init__(self, None) 
     uic.loadUi(r'interface/MainWindow.ui', self) 
     self.initializeUI() 

    def initializeUI(self): 
     self.setWindowTitle('Calculator') 

私は、Pythonに新たなんだので、私と一緒に負担してください。私はいくつかの異なる例を見てきましたが、アプリケーションが複数のソースファイルにまたがっているときは、実際には何もカバーしていません。ありがとう。

答えて

1

ガベージコレクタが削除しているコメントは、関数内で作成された変数が関数が呼び出されている間だけ存在するため、正しいです。また、GUIを実行できるようにするには、exec_()を呼び出して、必要なメインループを生成する必要があります。

class Calculator(QApplication): 

    def __init__(self): 
     args = sys.argv 
     QApplication.__init__(self, args) 
     self.initializeApplication() 
     self.exec_() 

    def initializeApplication(self): 
     self.app = MainWindow.MainWindow() 
     self.app.show() 


if __name__ == '__main__': 
    app = Calculator() 
+0

これは完璧に動作するようですが、ありがとうございます!これを達成するためのよりクリーンな方法がありますか?私が読んだことのすべてと、私が見てきた事例は、この異なる方法について行くようです。 –

+0

この方法は適切です。私の答えを正しいものとしてマークすることを忘れないでください。 – eyllanesc

関連する問題