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

12 投票
3 回答
4436 浏览
提问于 2025-04-15 16:01

我想了解如何把一些新的Windows 7任务栏功能整合到我的PyQt应用程序里。

具体来说,我想知道是否已经可以使用新的进度指示器(点击这里查看)和快速链接(www.petri.co.il/wp-content/uploads/new_win7_taskbar_features_8.gif)。

如果有人能提供一些链接,或者只是告诉我“还没有实现”,我会非常感激。

非常感谢!

3 个回答

3

在Qt 4.5中没有实现这个功能,不过看起来在Qt 4.6中正在开发中,具体可以查看这篇文章。PyQt在Qt 4.6正式发布之前不会支持4.6版本,但你可以试试4.6的快照版本,或者查看Qt的代码库,看看C++版本是否支持你想要的功能。如果支持的话,PyQt 4.6也会支持这些功能。

补充说明:在4.6功能列表中没有明确提到对Windows 7的支持,但这并不意味着它没有你想要的功能。因为如果我理解得没错,他们很可能会把这个功能整合到现有的组件中。

5

有一个Qt的附加工具,可以实现所有Windows 7任务栏的扩展功能。这个工具叫做 Q7Goodies。它还提供了PyQt的绑定,所以这可能是使用PyQt来利用Windows 7功能的最简单方法。

23

正如quark所说,Qt 4.5里没有这个功能,但你可以直接从Qt调用Windows的API。虽然这样做需要一些工作。

  1. 新的任务栏API是通过COM来实现的,所以你不能使用ctypes.windll。你需要创建一个.tlb文件来访问这些功能。可以从这个论坛帖子或者Windows SDK获取ITaskbarList的接口定义。把它保存为一个文件,比如叫TaskbarLib.idl。

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

    midl TaskbarLib.idl /tlb TaskbarLib.tlb
    
  3. 加载.tlb文件(你需要Win32扩展库来支持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)
    

这里有一个完整的示例脚本

来源: 1 2

撰写回答