2017-02-23 4 views
0

メインウィンドウのプッシュボタンに別のファイルをリンクしました。クリックするたびに、新しいウィンドウが開きますが、古いウィンドウ(プライマリウィンドウ)はまだ表示されます。新しいウィンドウに影響を与えずに、どのように閉じたり隠したりするのですか?PyQt5を使って新しいウィンドウを開くときに現在のウィンドウを隠すには

PS:私はここで新人です。私の一部にこの質問を投稿している間、どんな奇妙なことや間違いがあっても謝ります。ありがとうございました!ここでは完全な作業例です

import sys 
    from PyQt5 import QtCore, QtGui, QtWidgets 
    from create2 import Ui_MainWindow 
    from PyQt5.QtWidgets import QMainWindow, QWidget 
    from PyQt5.QtCore import QMargins 

    class Ui_Form(object): 
     def setupUi(self, Form): 
      Form.setObjectName("Form") 
      Form.resize(813, 655) 
      self.widget = QtWidgets.QWidget(Form) 
      self.widget.setGeometry(QtCore.QRect(190, 50, 501, 591)) 
      self.widget.setObjectName("widget") 
      . 
      . 
      . 
     def newusr_clk(self): 
      self.mainwin=QMainWindow() 
      self.ui=Ui_MainWindow() 
      self.ui.setupUi(self.mainwin) 
      self.mainwin.show() 
+0

'window.hide()'や ' window.close() ' – ekhumoro

+0

私は2つのどちらかを使用すると、そのような属性がないというエラーが表示されます。 –

+0

'QWidget'を継承したクラスのインスタンスでそれらを使用します。 – ekhumoro

答えて

-1

これで、新しいウィンドウを開いている間に、現在のウィンドウを隠す方法がわかりました。これは、(私はフォームで働いていたので)私の場合、コードでした:

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

は、だから私は、現在のウィンドウを非表示にするには、このコマンドを使用:

Form.setVisible(False) 
+0

フォームとは何ですか?あなたの 'Ui_Form'クラスも表示できますか? – Crispin

+0

もちろん、Form.show()を呼び出せれば、Form.hide()を呼び出すことができます。 – Crispin

1

はここに関連するコードです。メインウィンドウはQMainWindowです。ボタンをクリックするとQDialogが開きます。彼らのUI定義:別のファイルで

# file ui_main.py 
from PyQt5 import QtCore, QtWidgets 

class Ui_MainWindow: 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(442, 205) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.pushButton = QtWidgets.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(180, 80, 75, 23)) 
     self.pushButton.setObjectName("pushButton") 
     MainWindow.setCentralWidget(self.centralwidget) 

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

    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
     self.pushButton.setText(_translate("MainWindow", "PushButton")) 

#file ui_dialog.py 
from PyQt5 import QtCore, QtWidgets 

class Ui_Dialog: 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(508, 300) 
     self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) 
     self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32)) 
     self.buttonBox.setOrientation(QtCore.Qt.Horizontal) 
     self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) 
     self.buttonBox.setObjectName("buttonBox") 
     self.buttonBox.accepted.connect(Dialog.accept) 
     self.buttonBox.rejected.connect(Dialog.reject) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

は、MainWindowPreferenceDialogクラスを定義します。

# file main.py 
from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog 

from ui_dialog import Ui_Dialog 
from ui_main import Ui_MainWindow 

class MainWindow(QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 

     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

     self.ui.pushButton.clicked.connect(self.newusr_clk) 

newuser_clkスロットはMainWindowを隠し、dialog.exec()を経由して新しいQDialogボックスを開きます。 QDialogが閉じられると、MainWindowが再び表示されます。

class PreferencesDialog(QDialog): 
    def __init__(self, parent=None): 
     super(PreferencesDialog, self).__init__(parent) 

     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

そして、ここでは、スクリプトを実行する方法は次のとおりです:助け

if __name__ == '__main__': 
    import sys 

    app = QApplication(sys.argv) 
    window = MainWindow() 
    window.show() 
    sys.exit(app.exec_()) 

希望ここ

def newusr_clk(self): 
     self.hide() 
     dialog = PreferencesDialog(parent=self) 
     if dialog.exec(): 
      pass # do stuff on success 
     self.show() 

PreferenceDialogクラスです!

+0

私の場合、self.hide()が生成しているのは属性の欠落です。これはうまくいきません:( –

+1

この解決法を示す目的は、標準的なpyqtのやり方と一貫性のある作業方法を提案することでした。 – Crispin

関連する問題