는 방법을 닫을 때 다른 윈도우 기본 창을 닫에 pyqt5

0

질문

고 싶을 모두 닫고 다른 윈도우에서 열 메인 윈도우 기본 창이 닫힙니다.

찾아주세요 아래 min. 코드는 내가 테스트:

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QVBoxLayout, QWidget

import sys


class AnotherWindow(QWidget):
    """
    This "window" is a QWidget. If it has no parent, it
    will appear as a free-floating window as we want.
    """
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        self.label = QLabel("Another Window")
        layout.addWidget(self.label)
        self.setLayout(layout)


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.button = QPushButton("Push for Window")
        self.button.clicked.connect(self.show_new_window)
        self.setCentralWidget(self.button)

    def show_new_window(self, checked):
        self.w = AnotherWindow()
        self.w.show()

    def close_another_window(self):
        if self.w:
            self.w.close()


app = QApplication(sys.argv)

w = MainWindow()
app.aboutToQuit.connect(w.close_another_window)
w.show()
app.exec()

위와 같이 나도를 사용하는 aboutToQuit 옵션 QApplication지만,그것은 단지 가져오라고 할 때 다른 창이 닫힙니다.

를 닫고 싶은 다른 창이 자동으면합니다.이 닫힙니다.

pyqt5 python
2021-11-23 13:23:26
2

최고의 응답

4

를 구현하는 closeEvent:

class MainWindow(QMainWindow):
    w = None
    # ...
    def closeEvent(self, event):
        if self.w:
            self.w.close()

참고로 사용할 수도 있습니다 QApplication.closeAllWindows() 를 가까이 모든 최고 수준의 창의도 하지 않고 어떤 직접적인 참조하지만,어떤 경우의 사람들 windows 시 closeEvent() 이 기능을 중지하고 나머지.

을 방지하기 위해,당신은 사이클의 모든 윈도우를 사용하여 QApplication.topLevelWidgets();windows 을 무시하고 closeEvent 아직도 자신이 열려 있지만, 모든 다른 사람은 폐쇄됩니다:

    def closeEvent(self, event):
        for window in QApplication.topLevelWidgets():
            window.close()
2021-11-23 19:09:45
0

당신이 시도할 수 있었을 사용하여 신호:

from PyQt5.QtCore import pyqtSignal

class AnotherWindow(QWidget, close_signal):
    """
    This "window" is a QWidget. If it has no parent, it
    will appear as a free-floating window as we want.
    """
    def __init__(self):
        super().__init__()
        self.close_signal = close_signal
        self.close_signal.connect(self.close_me)  # connect handler to signal
        layout = QVBoxLayout()
        self.label = QLabel("Another Window")
        layout.addWidget(self.label)
        self.setLayout(layout)
    
    def close_me(self):
        # handler for signal    
        self.close()


class MainWindow(QMainWindow):
    close_signal = pyqtSignal()

    def __init__(self):
        super().__init__()
        self.button = QPushButton("Push for Window")
        self.button.clicked.connect(self.show_new_window)
        self.setCentralWidget(self.button)

    def show_new_window(self, checked):
        self.w = AnotherWindow(self.close_signal)
        self.w.show()

    def close_another_window(self):
        self.close_signal.emit()  # fire signal to close other windows

이 메커니즘을 허용하는 가까운 다른 창이 없어도 창을 닫.

(내가 사용되는 신호는 다른 목적으로,희망이 작품뿐만 아니라)

2021-11-23 13:27:42

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................