2017-07-19 7 views
0

をui.pyが含まれ、これは基本的な質問かもしれませんが、私はまだ実用的なソリューションが見つかりませんでした:Pythonの:QT5がメインのPythonスクリプトで

これが私の最初のPython UIスクリプトです...私はアイデアを持っていますUIを1つのファイルに入れて、実際のコードとアルゴリズムを別のファイルに入れておくという方法がありますが、これが良い習慣であるかどうか、またこの作業を行う方法はわかりません。

GTDesignerでUIを作成し、これをMainWindowPy.pyにpyuic5を使って変換しました。

これは私を与えた:

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     [...] 
    def retranslateUi(self, MainWindow): 
     [...] 

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

は今、私はUIがさらにdelevopmentに変更することができますので、そのままこのMainWindowPy.pyを残したいです。

どのようにリンクと私のMainApplication.pyスクリプトでこのファイルを実行し、どのように私は、ボタンなどのUI要素にアクセスすることができますすることができますか?

私は関数内にUIコード全体をラップして、これをMainApplication.pyのモジュールとしてインポートし、このモジュールを通して関数を呼び出しました。それはうまくいったが、それは「手つかずの」ものではない。

私は約subprocess.Popen()を知っていますが、もっと良い方法がありますか?

答えて

2

この場合生成されるコードは、mixinクラスです。これを別のファイルで使用するには、単純にインポートして、2つの基本クラス(新しいQtクラスを作成するクラスと、生成したファイルのmixinクラス)を作成します。新しいクラスののinitでプライマリ基底クラスのinitメソッド、およびミックスインクラスのsetupUiメソッドを実行する必要があります。今

from MainWindowPy import Ui_MainWindow 
from PyQt5 import QtWidgets 

class myMainWindow(QtWidgets.QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(myMainWindow, self).__init__(parent) # call init of QMainWindow, or QWidget or whatever) 
     self.setupUi(self) # call the function that actually does all the stuff you set up in QtDesigner 

はそれを使用すると、あなたはあなたが作ったカスタムクラスを開始します

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = myMainWindow() 
    MainWindow.show() 
    sys.exit(app.exec_())