python tk 音乐爬虫批量下载时 tk gui图形界面会出现假死
时间: 2023-08-02 17:10:58 浏览: 78
python 爬虫批量下载音乐
出现假死的情况可能是因为在主线程中进行了耗时的操作,导致界面无法响应用户的操作。为了解决这个问题,可以在下载操作时开启一个新的线程,将下载任务放在新线程中执行,这样就不会阻塞主线程,也不会导致界面假死。
以下是一个简单的实现过程:
1. 导入必要的模块
```python
import tkinter as tk
from tkinter import messagebox
import threading
import requests
import os
```
2. 创建主窗口和控制面板
```python
root = tk.Tk()
root.title("音乐批量下载")
root.geometry("300x150")
# 创建控制面板
control_panel = tk.Frame(root)
control_panel.pack(side="bottom")
```
3. 创建输入框和按钮
```python
# 创建输入框和按钮
url_entry = tk.Entry(root)
url_entry.pack(pady=10)
download_button = tk.Button(control_panel, text="下载", command=start_download)
download_button.pack(side="left")
```
4. 定义下载函数
```python
# 定义下载函数
def download(url, path):
try:
response = requests.get(url, stream=True)
response.raise_for_status()
with open(path, "wb") as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
return True
except Exception as e:
return False
```
5. 定义下载线程函数
```python
# 定义下载线程函数
def download_thread(url, path):
if download(url, path):
messagebox.showinfo("提示", "下载成功!")
else:
messagebox.showerror("错误", "下载失败!")
```
6. 定义开始下载函数
```python
# 定义开始下载函数
def start_download():
url_list = url_entry.get().split("\n")
for url in url_list:
if url.strip() == "":
continue
filename = url.split("/")[-1]
path = os.path.join(os.getcwd(), filename)
t = threading.Thread(target=download_thread, args=(url, path))
t.start()
```
完整代码如下:
阅读全文