कैसे बंद करने के लिए अन्य windows जब मुख्य विंडो में बंद कर दिया है 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, लेकिन यह केवल हो जाता है, कहा जाता है, जब एक और खिड़की को भी बंद कर दिया है.

मैं बंद करना चाहते हैं एक और खिड़की automaticaly जब mainwindow बंद कर दिया है.

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() समारोह बंद हो जाएगा की कोशिश कर बंद करने के लिए शेष.

कि से बचने के लिए, आप कर सकते हैं चक्र के सभी का उपयोग कर windows QApplication.topLevelWidgets(); खिड़कियों की अनदेखी 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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में