# coding=utf-8 from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import time import random import os import urllib.request from bs4 import BeautifulSoup''' 信号传参类型 pyqtSignal() #无参数信号 pyqtSignal(int) # 一个参数(整数)的信号 pyqtSignal([int],[str] # 一个参数(整数或者字符串)重载版本的信号 pyqtSignal(int,str) #二个参数(整数,字符串)的信号 pyqtSignal([int,int],[int,str]) #二个参数([整数,整数]或者[整数,字符串])重载版本 '''class Mythread(QThread):# 定义信号,定义参数为str类型# breakSignal = pyqtSignal(str, list)aaaSignal = pyqtSignal(str,list)def __init__(url, parent=None):super().__init__(parent)def set_url(self,url):self.url = urldef get_img_urls(self):try:html = urllib.request.urlopen(self.url).read()soup = BeautifulSoup(html, 'html.parser')img_tags = soup.find_all('img')img_urls = [img['src'] for img in img_tags if img.get('src')]return img_urlsexcept Exception as e:print("Error occurred: ", e)return []def run(self):img_urls=self.get_img_urls()self.download_imgs(img_urls)def download_imgs(self,img_urls):folder = r'E:\PYthon\python_基础\Python_learn\101_python学习相关\jpg_download'os.makedirs(folder, exist_ok=True)stop = 1if stop:for i, img_url in enumerate(img_urls):i += 1# time.sleep(1)try:file_path = os.path.join(folder, f"image_{i}.jpg")urllib.request.urlretrieve(img_url, file_path)txt = f"Downloaded {img_url} {file_path}"print(txt)print(i)self.aaaSignal.emit(txt, [file_path])except Exception as e:failed_txt = f'Failed to download {img_url} {e}'print(failed_txt)self.aaaSignal.emit(failed_txt, img_urls)# 让程序休眠time.sleep(1)if __name__ == '__main__':app = QApplication([])dlg = QDialog()dlg.resize(400, 300)dlg.setWindowTitle("下载图片界面")dlgLayout = QVBoxLayout()dlgLayout.setContentsMargins(40, 40, 40, 40)btn = QPushButton('测试按钮')stop_btn = QPushButton('STOP')load_bth = QPushButton('load')dlgLayout.addWidget(btn)dlgLayout.addWidget(stop_btn)dlgLayout.addStretch(40)dlg.setLayout(dlgLayout)dlg.show()textEdit = QTextEdit()dlgLayout.addWidget(textEdit)thread = Mythread()def stop():global stopstop = 0thread.run = 0btn.setText("停止下载")print('下载停止')def downing_txt(i,img_urls):btn.setText(i)def jpg_load(txt,img_urls):txt_show='\n'.join(img_urls)textEdit.setText(txt_show)stop_btn.clicked.connect(stop)# 创建线程# # 注册信号处理函数# thread.breakSignal.connect(chuli)# thread.aaaSignal.connect(downing_txt)thread.aaaSignal.connect(jpg_load)# # 启动线程url = "https://www.oldboyedu.com"img_urls = thread.set_url(url)# thread.download_imgs(img_urls)thread.start()app.exec_()dlg.exec_()app.exit()