2016-07-11 19 views
0

ボタンをクリックすると、別の画面を呼び出すボタンで簡単な画面が作成されました。レイアウトを切り替える

私は多くを検索しました。しかし、私はまだこれを行うことはできません: **私は2つのレイアウトを切り替えることができますので、私はtest.pyのボタンをクリックすると、レイアウトがscherm.pyに変更されるように**

test.py

from PyQt4 import QtCore, QtGui 
import subprocess 

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) 

class Ui_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(400, 300) 
     self.Button = QtGui.QPushButton(Form) 
     self.Button.setGeometry(QtCore.QRect(50, 40, 261, 231)) 
     self.Button.setObjectName(_fromUtf8("Button")) 
     self.Button.clicked.connect(self.fun) 

     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     Form.setWindowTitle(_translate("Form", "Form", None)) 
     self.Button.setText(_translate("Form", "Button", None)) 

    def fun(self): 
     subprocess.call(" scherm.py 1", shell=True) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Form = QtGui.QWidget() 
    ui = Ui_Form() 
    ui.setupUi(Form) 
    Form.show() 
    sys.exit(app.exec_()) 

scherm.py

from PyQt4 import QtCore, QtGui 

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) 

class Ui_PlaatjesScherm(object): 
    def setupUi(self, PlaatjesScherm): 
     PlaatjesScherm.setObjectName(_fromUtf8("PlaatjesScherm")) 
     PlaatjesScherm.resize(654, 528) 

     self.retranslateUi(PlaatjesScherm) 
     QtCore.QMetaObject.connectSlotsByName(PlaatjesScherm) 

    def retranslateUi(self, PlaatjesScherm): 
     PlaatjesScherm.setWindowTitle(_translate("PlaatjesScherm", "Plaatjes", None)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    PlaatjesScherm = QtGui.QWidget() 
    ui = Ui_PlaatjesScherm() 
    ui.setupUi(PlaatjesScherm) 
    PlaatjesScherm.show() 
    sys.exit(app.exec_()) 

答えて

0

代わりのsubprocess.call()を使用して、私はあなたがscherm QDialogを作る示唆しています。そうすれば、スロットfun(self)で別のスクリプトを実行する代わりに、クラスUi_PlatjesSchermのインスタンスを作成するだけで済みます。そのクラスに__init__メソッドを追加する必要があります。

これは私が新しいウィンドウを起動するために何をすべきかです:

class AddStationUI(QObject): 
""" 
Provides functionality to the UI that allows the user to add a weight to the database. 
This UI opens when the user clicks the button "Edit Weights" in the DB Access tab of the Main UI 
""" 

def __init__(self, db): 

    self.db = db 
    super(QObject, self).__init__() 
    self.window = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | 
           QtCore.Qt.WindowTitleHint | 
           QtCore.Qt.WindowMinMaxButtonsHint) 
    self.window.setSizeGripEnabled(True) 

    # Load the UI into self.ui 
    self.ui = uic.loadUi('sub_ui/Add_Station.ui', self.window) 

    # Set up the event handlers 
    self.callback_connector() 

    # Execute the ui 
    self.window.exec_() 

... 

はその後、私のメインクラスでは、これは私が「AddStationUI」ウィンドウを作成する方法である:

... 
self.ui.myButton.clicked.connect(self.add_station) 

def add_station(self): 
    AddStationUI(self.db) 
... 

これは、作成しますAddStationUIのインスタンス、__init__のメソッドでは、UIを読み込んで実行します。この方法では、subprocessを使用する必要はなく、2つのウィンドウを並行して実行できます。

関連する問題