40371


python3.5を使っています。pyqt5を用いてサブウィンドウにサブウィンドウだけを閉じるボタンを作りたいです。下のようなコードを書いてみましたが、サブウィンドウの「OK」というボタンを押したらメインウィンドウも一緒に閉じてしまいます。

[code]

    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class MainWindow(QWidget):
        def __init__(self):
            super().__init__()
    
            makeWindowButton = QPushButton("make window",self)
            makeWindowButton.move(150,50)
            makeWindowButton.clicked.connect(self.makeWindow)
    
            """
            self.label = QLabel(self)
            self.label.move(150,25)
            self.label.setText("default:")
            """
    
    
            self.setWindowTitle('ボタンで画像表示')
            self.setGeometry(300, 300, 400, 100)
    
    
        def makeWindow(self):
            subWindow = SubWindow(self)
            subWindow.show()
        """
        # サブウィンドウから実行
        def setParam(self, param):
            self.label.setText(param)
        """
    
    class SubWindow:
        def __init__(self, parent=None):
            self.w = QDialog(parent)
            self.parent = parent
            """
            label = QLabel()
            label.setText('Sub Window')
    
            self.edit = QLineEdit()
    
            button = QPushButton('送信')
            button.clicked.connect(self.setParamOriginal)
            """
    
            label=QLabel()
            label.setPixmap(QPixmap('gazo.jpg'))
    
            button=QPushButton('OK')
            button.clicked.connect(QCoreApplication.instance().quit)
    
            layout = QVBoxLayout()
            layout.addWidget(label)
            layout.addWidget(button)
    
            self.w.setLayout(layout)
    
    
        def show(self):
            self.w.exec_()
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        main_window = MainWindow()
    
        main_window.show()
        sys.exit(app.exec_())
    
[/code]


CC BY-SA 3.0
2017-12-19T01:49:57.163
40370
2021-03-09T04:51:53.603
2021-03-09T04:51:53.603
26529
26529
question
python python3 pyqt5
pyqt5 でサブウィンドウだけを閉じるボタンを作りたい


メインウィンドウも一緒に閉じてしまうのは、ボタンのクリックにアプリケーションの終了（`QCoreApplication.instance().quit`）が紐付けられているからです。  
これを、当該ウィンドウのクローズに紐付ければそのウィンドウだけ閉じます。

[code]

    button.clicked.connect(self.w.close)
    
[/code]


CC BY-SA 3.0
2017-12-19T03:03:11.843
40371
2017-12-19T03:03:11.843
3054
40370
answer