Flying_boy_l 2021-11-17 09:33 采纳率: 0%
浏览 15
已结题

多线程Python爬虫程序无法调用pyqt5程序,求帮助

pyqt5程序代码

# -*- coding: UTF-8 -*-
import sys

from PyQt5.QtCore import QCoreApplication, QThread, QMutex
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QLineEdit, QApplication, QPushButton, QGridLayout

qmut_1 = QMutex()

class Thread_1(QThread):
    def __init__(self,image_path, portfolioname, company, username,driver,str,nameLineEdit):
        super(Thread_1, self).__init__()
        self.image_path = image_path
        self.portfolioname = portfolioname
        self.company = company
        self.username = username
        self.driver = driver
        self.str = str
        self.nameLineEdit = nameLineEdit

    def run(self):
        # qmut_1.lock()
        name = self.nameLineEdit.text()  # 获取文本框内容
        name = name.replace(" ", "")
        print('验证码: %s  ' % name)
        self.str += "'"
        self.str += name
        self.str += "')"
        eval(self.str)
        # self.QCoreApplication.quit
        self.close()
        # qmut_1.unlock()


class File(QWidget):
    def __init__(self, image_path, portfolioname, company, username,driver,str):
        super(File, self).__init__()
        self.image_path = image_path
        self.portfolioname = portfolioname
        self.company = company
        self.username = username
        self.driver = driver
        self.str = str
        self.initUi()

    def initUi(self):
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QLineEdit')

        layout = QGridLayout()
        lab_info = QLabel("账号")
        info = self.portfolioname + "-" + self.company + "-" + self.username
        lab_mes = QLabel(info)

        lab1 = QLabel("图片")
        lab_img = QLabel()
        lab_img.setPixmap(QPixmap(self.image_path))

        nameLabel = QLabel("验证码")
        self.nameLineEdit = QLineEdit(" ")

        layout.addWidget(lab_info, 1, 0)
        layout.addWidget(lab_mes, 1, 1)

        layout.addWidget(lab1, 2, 0)
        layout.addWidget(lab_img, 2, 1)

        layout.addWidget(nameLabel, 3, 0)
        layout.addWidget(self.nameLineEdit, 3, 1)

        layout.setColumnStretch(1, 10)

        save_Btn = QPushButton('确认')
        cancle_Btn = QPushButton('取消')
        cancle_Btn.clicked.connect(QCoreApplication.quit)
        save_Btn.clicked.connect(self.addNum)

        layout.addWidget(save_Btn)
        layout.addWidget(cancle_Btn)
        self.setLayout(layout)

        self.show()

    def addNum(self):
        name = self.nameLineEdit.text()  # 获取文本框内容
        name = name.replace(" ","")
        print('验证码: %s  ' % name)
        # self.str += "'"
        # self.str += name
        # self.str += "')"
        eval(self.str)
        # self.QCoreApplication.quit
        self.close()
        # self.thread_1 = Thread_1(self.image_path, self.portfolioname, self.company, self.username,self.driver,self.str,self.nameLineEdit)
        # self.thread_1.start()


def run_1(image_path, portfolioname, company, username,driver,str):
    app = QApplication(sys.argv)
    ex = File(image_path, portfolioname, company, username,driver,str)
    app.exit(app.exec_())


if __name__ == '__main__':
    image_path = r"q1.png"
    run_1(image_path,"12356","华夏","456789","driver","print('ls')")

多线程调用程序


from multiprocessing.dummy import Pool
from qtproblem import qtextend
from qtall.qt_test import MainWindow,Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
def m_thread_pool():
    image_path_1 = "q1.png"
    image_path_2 = "q2.png"
    list_re = [[image_path_1,"12356","华夏","456789","driver","print('ls')"],[image_path_2,"12356","华夏","456789","driver","print('ls')"]]
    pool = Pool(2)
    pool.map(decomposition,list_re)

def decomposition(list_re):
    image_path = list_re[0]
    portfolioname = list_re[1]
    company = list_re[2]
    username = list_re[3]
    driver = list_re[4]
    str = list_re[5]
    qtextend.run_1(image_path, portfolioname, company, username, driver, str)
    print("程序正在继续执行")

# def m_thread_pool_2():
#     mainw = MainWindow()
#     pool = Pool(8)
#     pool.map(Printl)
#
# def Printl():
#     print("1562")

if __name__ == '__main__':
    m_thread_pool()

如果将线程池内的线程数改为1,就能正常执行

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月25日
    • 创建了问题 11月17日

    悬赏问题

    • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
    • ¥15 如何在arcgis中导出拓扑关系表
    • ¥15 处理数据集文本挖掘代码
    • ¥15 matlab2017
    • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
    • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
    • ¥20 求:怎么实现qt与pcie通信
    • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
    • ¥15 基于蒙特卡罗法的中介效应点估计代码
    • ¥15 罗技G293和UE5.3