在父窗口关闭弹出的子窗口

关闭子窗口的方法
本文介绍了一种使用JavaScript在父窗口中关闭由window.open方法打开的子窗口的技术。通过设置子窗口变量并在需要关闭子窗口时调用close方法,可以实现在特定条件下关闭子窗口的功能。
下面的代码可以在父窗口关闭弹出的子窗口:   
var subWin = null; 



function popOne() {

  subWin = window.open('yourURL.html','aWin','height=200,width=200');

} 



function eradic8() {

  if (subWin != null && subWin.open) subWin.close();

} 

 

  

可以灵活运用这个方法,比如在关闭父窗口的同时关闭所有window.open方法打开的子窗口等.

### 弹出窗口的实现方式 在 PySide6 中,可以通过多种方式在父窗口弹出窗口,常见的方法包括使用 `QDialog`、`QWidget` 或 `QMainWindow` 来创建窗口,并通过按钮或其他事件触发其显示。 #### 使用 QDialog 实现模态窗口 `QDialog` 是用于创建对话框的标准类,可以通过 `exec()` 方法实现模态弹窗,即弹出窗口会阻塞主窗口的交互,直到该窗口关闭。 ```python from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QDialog, QVBoxLayout, QLabel class SubWindow(QDialog): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("窗口") layout = QVBoxLayout() label = QLabel("这是一个模态窗口") layout.addWidget(label) self.setLayout(layout) class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("主窗口") button = QPushButton("打开模态窗口") button.clicked.connect(self.show_sub_window) self.setCentralWidget(button) def show_sub_window(self): dialog = SubWindow(self) dialog.exec() # 模态显示 ``` 这种方式适用于需要用户完成特定操作后才能继续操作主窗口的场景[^1]。 #### 使用 QWidget 实现非模态窗口 如果希望窗口是非模态的,即允许用户在主窗口窗口之间自由切换,则可以使用 `QWidget` 或 `QMainWindow` 创建窗口,并通过 `show()` 方法显示。 ```python from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget class ChildWindow(QWidget): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("窗口") self.resize(300, 200) self.show() class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("主窗口") self.resize(400, 300) button = QPushButton("打开窗口") button.clicked.connect(self.open_child) self.setCentralWidget(button) def open_child(self): self.child = ChildWindow(self) self.child.show() ``` 该方法适用于需要多个独立窗口同时存在的场景。 #### 使用 QStackedWidget 实现界面切换 如果希望在同一个窗口内切换不同的界面,而不是弹出窗口,可以使用 `QStackedWidget`,它允许在主窗口内切换多个页面。 ```python from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabel, QStackedWidget class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("窗口切换示例") self.stacked_widget = QStackedWidget() self.setCentralWidget(self.stacked_widget) page1 = QWidget() layout1 = QVBoxLayout() label1 = QLabel("主页面") button1 = QPushButton("切换到页面") button1.clicked.connect(lambda: self.stacked_widget.setCurrentIndex(1)) layout1.addWidget(label1) layout1.addWidget(button1) page1.setLayout(layout1) page2 = QWidget() layout2 = QVBoxLayout() label2 = QLabel("页面") button2 = QPushButton("返回主页面") button2.clicked.connect(lambda: self.stacked_widget.setCurrentIndex(0)) layout2.addWidget(label2) layout2.addWidget(button2) page2.setLayout(layout2) self.stacked_widget.addWidget(page1) self.stacked_widget.addWidget(page2) ``` 此方法适合在不打开新窗口的前提下实现多个界面的切换[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值