獲取特定文件類(lèi)型的關(guān)聯(lián)圖標(biāo)

文件系統(tǒng)相關(guān)類(lèi)

要處理文件系統(tǒng)相關(guān)功能,一般直接使用Python 標(biāo)準(zhǔn)庫(kù)中的函數(shù),Qt 包含的以下幾個(gè)類(lèi),只需要簡(jiǎn)單了解。

  • QFileSystemModel 是一個(gè)管理本地文件系統(tǒng)的類(lèi),比如說(shuō)創(chuàng)建目錄,刪除文件等等。他是一個(gè)模型類(lèi),繼承自 QAbstractItemModel ,因此可以被視圖使用。
  • QDir 是一個(gè)管理目錄的類(lèi),比如創(chuàng)建新目錄,獲取路徑分隔符等等;
  • QFile 是一個(gè)管理文件的類(lèi),比如刪除、復(fù)制文件等等。
  • QFileInfo 是一個(gè)管理文件信息的類(lèi),比如文件是否可讀寫(xiě)、最后的修改事件、權(quán)限信息等等。

獲取文件類(lèi)型關(guān)聯(lián)圖標(biāo)

要獲取特定文件類(lèi)型的關(guān)聯(lián)圖標(biāo),需要使用到 QFileIconProvider 類(lèi),這個(gè)類(lèi)主要提供了一個(gè) icon(...) 函數(shù),可以得到 QIcon 對(duì)象

icon(...) 函數(shù)接收兩種類(lèi)型的參數(shù)

  • icon(IconType) 返回系統(tǒng)圖標(biāo)
  • icon(QFileInfo) 返回特定文件的關(guān)聯(lián)圖標(biāo)

IconType 枚舉類(lèi)型

IconType 是個(gè)枚舉類(lèi)型,有以下幾種值:

  • QFileIconProvider::Computer 電腦
  • QFileIconProvider::Desktop 桌面
  • QFileIconProvider::Trashcan 回收站
  • FileIconProvider::Network 網(wǎng)絡(luò)
  • QFileIconProvider::Drive 驅(qū)動(dòng)器
  • QFileIconProvider::Folder 文件夾
  • QFileIconProvider::File 文件

將圖標(biāo)對(duì)象保存為文件

得到 QIcon 對(duì)象以后:

  • 可以直接在程序中使用
  • 不能直接保存為文件,好在 QIcon 提供了一個(gè) pixmap(w, h) 函數(shù),可以將 QIcon 轉(zhuǎn)換為 QPixmap ,而 QPixmap 對(duì)象可以保存為文件。

臨時(shí)文件

QFileInfo 對(duì)象需要一個(gè)真正存在的文件才能正確創(chuàng)建,我們使用 QTemporaryFile 創(chuàng)建各種類(lèi)型的臨時(shí)文件,傳給 QFileInfo 。

使用臨時(shí)文件可能出現(xiàn)的問(wèn)題

臨時(shí)文件對(duì)象 QTemporaryFile 只在運(yùn)行范圍內(nèi)有效,一旦脫離了運(yùn)行范圍,文件將會(huì)被刪除,QFileInfo 也不能獲取正確的文件信息,導(dǎo)致不能解析出圖標(biāo)。

注意事項(xiàng)

QFileIconProvider 需要 QApplication 支持,因此,需要實(shí)例化一個(gè) QApplication 對(duì)象,得到圖標(biāo)并保存以后,調(diào)用 quit() 方法退出即可

案例代碼

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

"""
這個(gè)程序可以獲取系統(tǒng)圖標(biāo)以及指定的文件類(lèi)型圖標(biāo),并將他們保存為文件
"""

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 類(lèi)型好像不能超過(guò) 32*32
    pixmap.save('icons\\' + filename + '.ico')


def getIcon():
        # 系統(tǒng)圖標(biāo)
    icontype = {0: "Computer", 1: "Desktop", 2: "Trashcan",
                3: "Network", 4: "Drive", 5: "Folder", 6: "File"}

    # 特定文件類(lèi)型
    filetype = ['txt', 'doc', 'docx', 'ppt', 'pptx',
                'xls', 'xlsx', 'pdf', 'exe', 'zip', 'rar', 'mp4']

    # 圖標(biāo)提供者,主要靠他獲取圖標(biāo)
    provider = QFileIconProvider()

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

    for ext in filetype:
        # 創(chuàng)建臨時(shí)文件
        f = QTemporaryFile('temp_XXXXXX.' + ext)
        # 打開(kāi)文件才真正創(chuàng)建
        f.open()
        # 關(guān)閉臨時(shí)文件不會(huì)真正刪除,直到脫離運(yùn)行上下文,因此可以關(guān)閉
        f.close()

        # QFileInfo 需要一個(gè)真正的文件,這里把臨時(shí)文件給他
        fi = QFileInfo(f)

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


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容