文件系統(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()