首页 > 解决方案 > PyQt5 线程化 Selenium 脚本

问题描述

我很难弄清楚 PyQt5 中的线程。我为我在工作中使用的脚本制作了一个 GUI,以便与我的同事分享。该脚本使用从 GUI 接收的一些变量执行 selenium 浏览器自动化。该脚本位于不同的 .py 文件中,它不从任何类继承,当我单击查询按钮时,我只是在 mainapp.py 中实例化它。(哦,脚本没有返回任何东西,我添加了一个 return True 用于测试目的)

主应用程序.py

class OutputCheckerSub(Ui_OutputChecker):

def __init__(self):
    super().__init__()
    ........
    ........

    # Connecting Query button
    self.query_button.clicked.connect(self.run_output_script)

def run_output_script(self):
    self.output_script.run_script()

    ......

这将使用适当的变量启动脚本,但会使 GUI 应用程序崩溃。

我设法让线程有点工作(W / O设置变量)但它在10秒后崩溃。

多线程.py

class OutputScriptThread(QThread):
    signal = pyqtSignal(bool)
    def __init__(self):
        super().__init__()

    def run(self):
        output_checker_script = output_checker.OutputCheckerScript()
        state = output_checker_script.run_script()
        self.signal.emit(state)

线程错误的 mainapp.py

class OutputCheckerSub(Ui_OutputChecker):

    def __init__(self):
        super().__init__()
        .......
        .......
        # Connecting Query button
        self.query_button.clicked.connect(self.run_output_script)
        self.outputcheck_thread = multithreading.OutputScriptThread()

    def run_output_script(self):
        self.outputcheck_thread.start()

    .....

一个更具挑战性的部分是将变量从一个类传递到另一个类。目前我的 GUI 直接修改了实例化脚本的变量。如果我让线程工作,我应该在哪里设置变量?从线程?

标签: pythonpyqt5python-multithreading

解决方案


推荐阅读