首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将值从一个窗口传递到另一个PyQT

如何将值从一个窗口传递到另一个PyQT
EN

Stack Overflow用户
提问于 2021-07-20 11:06:35
回答 1查看 1.7K关注 0票数 0

我有一个PyQT5网络刮刀程序,它使用两个窗口。第二个窗口是一个配置窗口,您可以在其中输入url来抓取,但是我不知道如何返回url,因此主窗口可以访问它。

代码语言:javascript
复制
class SpiderConfWindow(QMainWindow, Ui_SpiderSettings):
    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):
        return self.ui.entryUrl.text()


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)

    def spider_settings(self):
        self.spider_conf_w.show()

我希望SpiderConfWindow.confirm设置MainWindow的url属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 11:40:09

通过小部件发送数据的正确方法是使用Qt的信号和插槽机制。

一旦您将所有内容适当地连接起来,事件(如单击SpiderConfWindow的按钮)将触发包含某些数据的信号的发射。该信号将由时隙处理--这可能是您MainWindow类中的一种方法,它知道如何处理数据。

由于我无法访问GUI的代码,下面是一个显示这种行为的最小示例。SubWindow小部件在单击MainWindow小部件中的按钮时生成,然后在单击submit按钮时发出submitClicked信号(字符串)。这个信号连接到MainWindowon_sub_window_confirm,它作为处理传入数据的插槽工作。

代码语言:javascript
复制
import sys

from PyQt5 import QtCore as qtc
from PyQt5 import QtWidgets as qtw


class SubWindow(qtw.QWidget):
    submitClicked = qtc.pyqtSignal(str)  # <-- This is the sub window's signal
    
    def __init__(self, parent=None):
        super().__init__(parent)
        layout = qtw.QVBoxLayout()
        self.setLayout(layout)
        self.line_edit = qtw.QLineEdit(placeholderText="Enter URL here:")
        self.btn = qtw.QPushButton("Submit")
        layout.addWidget(self.line_edit)
        layout.addWidget(self.btn)
        self.btn.clicked.connect(self.confirm)

    def confirm(self):  # <-- Here, the signal is emitted *along with the data we want*
        self.submitClicked.emit(self.line_edit.text())
        self.close()


class MainWindow(qtw.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.sub_window = None  # placeholder attribute for the sub window
        layout = qtw.QVBoxLayout()
        self.setLayout(layout)
        self.label = qtw.QLabel("Current URL: None")
        self.btn = qtw.QPushButton("Get new URL...")
        layout.addWidget(self.label)
        layout.addWidget(self.btn)
        self.btn.clicked.connect(self.show_sub_window)

    def show_sub_window(self):  # <-- Here, we create *and connect* the sub window's signal to the main window's slot
        self.sub_window = SubWindow()
        self.sub_window.submitClicked.connect(self.on_sub_window_confirm)
        self.sub_window.show()
    
    def on_sub_window_confirm(self, url):  # <-- This is the main window's slot
        self.label.setText(f"Current URL: {url}")


if __name__ == "__main__":
    app = qtw.QApplication(sys.argv)
    gui = MainWindow()
    gui.show()
    sys.exit(app.exec_())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68453805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档