获取特定文件类型的关联图标

2017-08-26  本文已影响116人  勤劳的悄悄

文件系统相关类

要处理文件系统相关功能,一般直接使用Python 标准库中的函数,Qt 包含的以下几个类,只需要简单了解。

获取文件类型关联图标

要获取特定文件类型的关联图标,需要使用到 QFileIconProvider 类,这个类主要提供了一个 icon(...) 函数,可以得到 QIcon 对象

icon(...) 函数接收两种类型的参数

IconType 枚举类型

IconType 是个枚举类型,有以下几种值:

将图标对象保存为文件

得到 QIcon 对象以后:

临时文件

QFileInfo 对象需要一个真正存在的文件才能正确创建,我们使用 QTemporaryFile 创建各种类型的临时文件,传给 QFileInfo

使用临时文件可能出现的问题

临时文件对象 QTemporaryFile 只在运行范围内有效,一旦脱离了运行范围,文件将会被删除,QFileInfo 也不能获取正确的文件信息,导致不能解析出图标。

注意事项

QFileIconProvider 需要 QApplication 支持,因此,需要实例化一个 QApplication 对象,得到图标并保存以后,调用 quit() 方法退出即可

案例代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
这个程序可以获取系统图标以及指定的文件类型图标,并将他们保存为文件
"""

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.Qt import *


def saveIcon(icon, filename, w=32, h=32):
    pixmap = icon.pixmap(w, h)
    # ico 类型好像不能超过 32*32
    pixmap.save('icons\\' + filename + '.ico')


def getIcon():
        # 系统图标
    icontype = {0: "Computer", 1: "Desktop", 2: "Trashcan",
                3: "Network", 4: "Drive", 5: "Folder", 6: "File"}

    # 特定文件类型
    filetype = ['txt', 'doc', 'docx', 'ppt', 'pptx',
                'xls', 'xlsx', 'pdf', 'exe', 'zip', 'rar', 'mp4']

    # 图标提供者,主要靠他获取图标
    provider = QFileIconProvider()

    for i in range(7):
        icon = provider.icon(i)
        saveIcon(icon, icontype[i])

    for ext in filetype:
        # 创建临时文件
        f = QTemporaryFile('temp_XXXXXX.' + ext)
        # 打开文件才真正创建
        f.open()
        # 关闭临时文件不会真正删除,直到脱离运行上下文,因此可以关闭
        f.close()

        # QFileInfo 需要一个真正的文件,这里把临时文件给他
        fi = QFileInfo(f)

        icon = provider.icon(fi)
        saveIcon(icon, ext)


if __name__ == '__main__':
    # 需要一个 QApplication ,QaFileIconProvider 才能使用
    app = QApplication(sys.argv)
    getIcon()
    app.quit()

上一篇 下一篇

猜你喜欢

热点阅读