PyQT如何实现两个窗口间传值,将配置窗口输入的URL返回给主窗口
解决方案
PyQt中跨窗口传值推荐用自定义信号槽实现,你可以按以下步骤修改代码:
- 首先在配置窗口类中自定义一个携带字符串参数的信号,点击确认按钮时触发该信号并传递输入的URL
- 主窗口初始化配置窗口时,将配置窗口的自定义信号绑定到主窗口自身的URL属性赋值方法
修改后的完整代码如下:
from PyQt5.QtCore import pyqtSignal # 导入信号类 class SpiderConfWindow(QMainWindow, Ui_SpiderSettings): # 自定义信号:参数为要传递的URL字符串 url_confirmed = pyqtSignal(str) def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_SpiderSettings() self.ui.setupUi(self) self.ui.btnConfirm.clicked.connect(self.confirm) def confirm(self): # 触发信号,传递输入框中的URL input_url = self.ui.entryUrl.text().strip() self.url_confirmed.emit(input_url) # 可选:点击确认后关闭配置窗口 self.close() class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super().__init__(parent) self.spider_conf_w = SpiderConfWindow() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.url = None self.ui.btnSpiderSettings.triggered.connect(self.spider_settings) # 绑定配置窗口的信号到自身的赋值方法 self.spider_conf_w.url_confirmed.connect(self.update_url) def spider_settings(self): self.spider_conf_w.show() # 接收信号传递的URL并更新自身属性 def update_url(self, input_url): self.url = input_url # 可在此处追加URL赋值后的后续逻辑,比如合法性校验、启动爬虫等
补充说明
- 如果需要在传递URL前做合法性校验,可以在
SpiderConfWindow.confirm方法中加判断逻辑,校验通过后再触发信号 - 如果不需要保留配置窗口的历史输入内容,点击确认后调用
self.close()关闭窗口即可,下次打开会重新初始化
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

