window父子窗口交互

在前端中,可以通过window.open打开新窗口,那么新窗口可以与旧窗口进行数据交互吗?
答案当然是可以的,父窗口在打开子窗口时,子窗口的window对象会有一个opener打开者,代表的正是父窗口的window对象,我们可以通过这个opener对象对父窗口进行操纵。
以下代码请在一个项目中使用,用本地文件来调试,opener对象无效

父窗口

<html !DOCTYPE>
<head>
<title>父窗口</title>
</head>
<body>
	<form>
		<input type="button" id="forward" value="打开子窗口" onclick="open()">
		<br>
		子窗口选择的城市为:<input type="text" id="city">
	</form>
	<script>
		function open(){
			var subWindowURL = "subWindow.html"; //填子窗口的路径
			var style = "width=470,height=150,scrollbars=no,resizable=no";
			window.open(subWindowURL, "子窗口", style);
			document.getElementById("forward").value = "已打开子窗口";
		}
	</script>
</body>
</html>

子窗口

<html !DOCTYPE>
<head>
<title>子窗口</title>
</head>
<body>
	<form>
		选择:
		<select onchange="returnCity(this.value)">
			<option value="北京">北京</option>
			<option value="上海">上海</option>
			<option value="深圳">深圳</option>
			<option value="广州">广州</option>
			<option value="天津">天津</option>
		</select>
		<input type="button" value="关闭子窗口" onclick="close()">
		<br>
		子窗口选择的城市为:<input type="text" id="city">
	</form>
	<script>
		function close(){
			//window.opener表示父窗口的window对象
			var doc = window.opener.document;
			//将父窗口的打开按钮状态由"已打开子窗口"改为"打开子窗口"
			doc.getElementById("forward").value = "打开子窗口";
			window.close();
		}
		function returnCity(city){
			//获取父窗口的document对象
			var doc = window.opener.document;
			//将选择的城市传递到父窗口中显示
			doc.getElementById("city").value = city;
		}
	</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PYQT5中,可以通过多线程和信号来实现多窗口交互。 首先,你需要创建多个窗口。每个窗口可以是一个独立的QWidget或QDialog对象。可以使用QWidget或QDialog类来创建这些窗口。每个窗口都可以有自己的UI设计和逻辑。 然后,你可以使用多线程来处理每个窗口的逻辑。可以使用QThread类来创建和管理线程。你可以在每个线程中处理特定窗口的逻辑和操作。 为了实现多窗口交互,你可以使用信号和槽机制。在每个窗口的类中定义信号,并在需要的时候发送信号。其他窗口可以连接这些信号,并在接收到信号时执行相应的操作。可以使用pyqtSignal来定义信号,并使用emit方法发送信号。 例如,你可以在一个窗口类中定义一个信号,并在另一个窗口类中连接这个信号。当第一个窗口发出这个信号时,第二个窗口就会执行与这个信号关联的槽函数。 下面是一个简单的例子来说明pyqt5多窗口交互的实现: ```python from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QApplication, QWidget, QPushButton # 定义一个包含信号的类 class Window1(QWidget): signal = pyqtSignal(str) def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("Window 1") self.setGeometry(100, 100, 300, 200) button = QPushButton("Send Signal", self) button.clicked.connect(self.sendSignal) def sendSignal(self): self.signal.emit("Hello from Window 1!") # 定义另一个窗口类 class Window2(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("Window 2") self.setGeometry(500, 100, 300, 200) self.show() # 定义槽函数来接收信号 def receiveSignal(self, message): print("Received Signal:", message) # 创建应用程序并显示窗口 app = QApplication([]) window1 = Window1() window2 = Window2() # 连接信号和槽函数 window1.signal.connect(window2.receiveSignal) window1.show() app.exec_() ``` 在上面的例子中,我们创建了两个窗口类`Window1`和`Window2`。`Window1`类中定义了一个信号`signal`,并在按钮点击事件中发送这个信号。`Window2`类中定义了一个槽函数`receiveSignal`,用于接收来自`Window1`的信号。在主程序中,我们创建了这两个窗口的实例,并将`Window1`的信号连接到`Window2`的槽函数。当`Window1`发出信号时,`Window2`的槽函数会被触发,输出接收到的消息。 通过使用这种方式,你可以实现多个窗口之间的交互,并根据需要发送和接收信号来执行相关操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [PYQT5开启多个线程和窗口,多线程与多窗口交互实例](https://blog.csdn.net/xujianjun229/article/details/118560341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值