我正在编写一个聊天程序,用的是tkinter,希望能够在收到消息的时候,使任务栏处的窗口闪动一下(就像微信和qq收到消息后一样)。如何做到闪动一下窗口?
1条回答 默认 最新
- Smart-Space 2022-08-22 03:01关注本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
这需要用到com组件,单纯的ctypes无法解决。
- #https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-itaskbarlist3
- from tkinter import *
- from tkinter import ttk
- import ctypes
- import time
- u32=ctypes.windll.User32
- CLSID_TaskbarList = "{56FDF344-FD6D-11d0-958A-006097C9A090}"
- IID_ITaskbarList3 = "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}"
- import comtypes.client as cc
- cc.GetModule("TaskbarLib.tlb")
- import comtypes.gen.TaskbarLib as tbl
- ef = cc.CreateObject("{56FDF344-FD6D-11d0-958A-006097C9A090}",interface=tbl.ITaskbarList3)
- TBPF_NOPROGRESS = 0x00000000
- TBPF_INDETERMINATE = 0x00000001
- TBPF_NORMAL = 0x00000002
- TBPF_ERROR = 0x00000004
- TBPF_PAUSED = 0x00000008
- def test():
- b1['state']='disable'
- hwnd=u32.GetParent(root.winfo_id())
- ef.SetProgressState(hwnd,TBPF_INDETERMINATE)
- total=100#总计任务量 任意
- completed=1#完成任务量 任意
- #===你的耗时代码===
- while completed<=total:
- ef.SetProgressValue(hwnd,completed,total)
- completed+=1
- time.sleep(0.05)
- #======
- ef.SetProgressState(hwnd, TBPF_NOPROGRESS)
- b1['state']='normal'
- root=Tk()
- root.geometry('300x300+10+10')
- b1=ttk.Button(root,text='开始进度测试',command=test)
- b1.pack()
- root.mainloop()
这个代码理论上是可以的,但是我没办法导入TaskbarLib.tlb,或许可以到其它地方下载。
没办法,python本身不支持com。
赞回复