pyqt5 关闭所有子窗口
时间: 2024-10-23 17:09:34 浏览: 17
在PyQt5中,如果你想关闭所有的子窗口(包括顶级窗口的直接子窗口以及那些子窗口内的子窗口),你需要遍历整个窗口树(Window System Hierarchy)。你可以使用`QApplication`的实例来找到所有活动的窗口,然后对它们调用`close()`方法。以下是一个简单的示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.sub_window_1 = SubWindow(self) # 创建一个子窗口
self.sub_window_2 = AnotherSubWindow(self) # 另一个子窗口
def closeAllWindows():
app = QApplication.instance() # 获取当前的QApplication实例
all_windows = app.topLevelWidgets() # 找到所有顶层窗口
for window in all_windows:
if window is not None and window.isVisible():
window.close() # 对可见的窗口调用close()
if __name__ == '__main__':
app = QApplication(sys.argv)
main_win = MainWindow()
main_win.show()
# 创建其他窗口并添加到主窗口
main_win.sub_window_1.show()
main_win.sub_window_2.show()
# 关闭所有窗口
closeAllWindows()
sys.exit(app.exec_())
```
在这个例子中,`AnotherSubWindow` 类也需要继承自 `QWidget` 或者 `QMainWindow` 以成为合法的子窗口。
阅读全文