在PyQt中使用Windows 7任务栏功能

时间:2009-11-15 02:45:40

标签: python windows-7 pyqt pyqt4 taskbar

我正在寻找有关将一些新的Windows 7任务栏功能集成到我的PyQt应用程序中的信息。

具体而言,如果已经存在使用新进度指示器(see here)和快速链接的可能性(www.petri.co.il/wp-content/uploads/new_win7_taskbar_features_8.gif)。

如果有人可以提供一些链接或只是“尚未实施”,我将非常感激。

非常感谢。

3 个答案:

答案 0 :(得分:23)

正如Quark所说,功能不在Qt 4.5中,但你可以直接从Qt调用windows API。虽然它有点工作。

  1. 新的任务栏API通过COM公开,因此您无法使用ctypes.windll。您需要创建一个.tlb文件来访问这些函数。从this forum post或从Windows SDK获取ITaskbarList的接口定义。将其保存到一个名为eg的文件中TaskbarLib.idl。

  2. 创建.tlb文件。您可能需要Windows SDK,或者从其他地方获取IDL编译器。

    midl TaskbarLib.idl /tlb TaskbarLib.tlb
    
  3. 加载.tlb(你需要Win32 Extensions for Python,http://python.net/crew/skippy/win32/Downloads.html):

    import comtypes.client as cc
    cc.GetModule("TaskbarLib.tlb")
    
  4. 创建TaskbarList对象。设置进度条的功能位于ITaskbarList3接口:

    import comtypes.gen.TaskbarLib as tbl
    taskbar = cc.CreateObject(
        "{56FDF344-FD6D-11d0-958A-006097C9A090}",
        interface=tbl.ITaskbarList3)
    
  5. 现在您可以调用API函数:

    taskbar.HrInit()
    taskbar.SetProgressValue(self.winId(),40,100)
    
  6. 这是一个complete example script。 资料来源:     1     2

答案 1 :(得分:5)

有一个Qt插件可以实现所有Windows 7任务栏扩展。它被称为Q7Goodies。它带有PyQt绑定,因此这可能是利用PyQt中Windows 7功能的最简单方法。

答案 2 :(得分:3)

未在Qt 4.5中实施,但会出现in the works for Qt 4.6。在Qt 4.6正式发布之前,PyQt不会包装4.6,但您可以使用4.6 snapshot或结帐Qt repository并查看C ++版本是否支持您想要的功能。如果确实如此,那么PyQt 4.6也会支持它。

补充:list of 4.6 features没有显示明确的Windows 7支持,但这并不意味着它没有你想要的东西,因为,至少如果我理解正确,它可能会折叠那个现有小部件的功能。