木雪1230 2023-03-12 18:25 采纳率: 0%
浏览 8

关于module 'win32api' has no attribute 'shell_taskbar'的问题,如何解决?

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'

在网上查了好久都解决不了

  • 写回答

1条回答 默认 最新

  • 我爱OJ 2023-03-12 18:56
    关注
    评论

报告相同问题?

问题事件

  • 专家修改了标签 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)
  • ¥15 python Flassk 模块部署 服务器时报错
  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来