module 'win32api' has no attribute 'shell_taskbar'怎么解决?
具体在63行,以下是完整代码:
import threading
import tkinter as tk
from tkinter import ttk
import win32api
import win32gui
import urllib.request
class DownloadThread(threading.Thread):
def __init__(self, url, filename, progress_bar):
super().__init__()
self.url = url
self.filename = filename
self.progress_bar = progress_bar
def run(self):
with urllib.request.urlopen(self.url) as response, open(self.filename, 'wb') as f:
total_length = int(response.getheader('Content-Length'))
bytes_read = 0
while True:
chunk = response.read(1024)
if not chunk:
break
f.write(chunk)
bytes_read += len(chunk)
percent_complete = int(bytes_read / total_length * 100)
self.progress_bar['value'] = percent_complete
class DownloaderGUI:
def __init__(self, master):
self.master = master
self.master.geometry('300x200')
self.master.title('Downloader')
self.url_label = tk.Label(master, text='URL')
self.url_label.pack()
self.url_entry = tk.Entry(master)
self.url_entry.pack()
self.filename_label = tk.Label(master, text='Filename')
self.filename_label.pack()
self.filename_entry = tk.Entry(master)
self.filename_entry.pack()
self.progress_bar = ttk.Progressbar(master, orient='horizontal', mode='determinate')
self.progress_bar.pack()
self.start_button = tk.Button(master, text='Start', command=self.start_download)
self.start_button.pack()
self.quit_button = tk.Button(master, text='Quit', command=self.quit)
self.quit_button.pack()
def start_download(self):
url = self.url_entry.get()
filename = self.filename_entry.get()
download_thread = DownloadThread(url, filename, self.progress_bar)
download_thread.start()
def quit(self):
self.master.quit()
def minimize_to_tray(root):
icon = win32api.shell_taskbar.GetModuleFileName(None)
hicon = win32api.shell_taskbar.LoadIconFromFile(icon)
hwnd = root.winfo_id()
_,_,_,x,y = root.geometry()
root.withdraw()
nid = (hwnd, 0, win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP, hicon, "Downloader")
win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
def restore_from_tray(event, root):
hwnd = root.winfo_id()
win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, (hwnd, 0))
root = tk.Tk()
downloader_gui = DownloaderGUI(root)
minimize_to_tray(root)
root.bind('<Unmap>', lambda event: minimize_to_tray(root))
root.bind('<Map>', lambda event: restore_from_tray(event, root))
root.mainloop()
报错信息:
Traceback (most recent call last):
File "g:\Download.py", line 77, in <module>
minimize_to_tray(root)
File "g:\Download.py", line 63, in minimize_to_tray
icon = win32.shell_taskbar.GetModuleFileName(None)
AttributeError: module 'win32api' has no attribute 'shell_taskbar'
在网上查了好久都解决不了