2013-07-12 60 views
0

我想在任務欄按鈕中顯示我的應用程序的進度。 我用this answer作爲參考。Python + Tkinter Windows 7任務欄進度

下面是我做的一個例子:

import tkinter 

import comtypes.client as cc 
cc.GetModule("TaskbarLib.tlb") 

import comtypes.gen.TaskbarLib as tbl 
taskbar = cc.CreateObject(
    "{56FDF344-FD6D-11d0-958A-006097C9A090}", 
    interface=tbl.ITaskbarList3) 

class gui(object): 
    def __init__(self, root): 
     self.root = root 

if __name__ == "__main__": 
    root = tkinter.Tk() 
    app = gui(root) 

    taskbar.HrInit() 
    taskbar.SetProgressValue(root.winfo_id(),40,100) 

    root.mainloop() 

但我看到任務欄按鈕沒有任何進展。我做錯了什麼?

回答

0

如果我是正確的,我認爲你需要.pack或.grid它

+0

在這裏,任務欄是一個COM對象,而不是一個tkinter控件。我不想把它放在窗口的任何地方(而且我甚至不需要 - 它沒有這些方法)。 – rocket

0

該標籤需要被激活。在taskbar.HrInit()之後添加taskbar.ActivateTab(root.winfo_id())。 在tkinter最好使用int(root.wm_frame(), 16)而不是root.winfo_id()因爲否則附近tkinter選項卡將出現一個python選項卡與進度條。 最後應調用taskbar.SetProgressState(HWND, TBPF_NOPROGRESS)來移除進度條。

標誌需要定義。例如。 TBPF_NOPROGRESS = 0。 查看微軟的網頁瞭解更多選項:https://msdn.microsoft.com/en-us/library/windows/desktop/dd391697%28v=vs.85%29.aspx

我知道這是一個老問題,但也許有人會覺得它有用。