# 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 = url def 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_urls except 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 = 1 if 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 stop stop = 0 thread.run = 0 btn.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()