def children_item_update(item, name_list): item_type = type(item) children_item = list() if item_type == QStandardItemModel: children_item = item.findItems("", Qt.MatchContains) else: print("start update item: ", item.text()) row_cnt = item.rowCount() for i in range(row_cnt): ic = item.child(i) if ic is None: print("child item is None???") continue children_item.append(ic) children = list() for child in children_item: child_name = child.text() children.append(child_name) print("children: ", children) for name in children: if name not in name_list: child_index = children.index(name) # print("child name: %s, index: %d" % (name, child_index)) if item_type == QStandardItemModel: item.takeChild(item.child(child_index)) else: item.takeChild(child_index) for name in name_list: if name not in children: item.appendRow(QStandardItem(QFileIconProvider().icon(QFileIconProvider.Folder), name)) print("children item update done")
def data(self, index, role=None): if not index.isValid(): return QVariant() if role == Qt.DisplayRole: item = self.file_items[index.row()] if index.column() == 0: return item.file_name elif index.column() == 1: return item.file_path elif index.column() == 2: return item.file_size elif index.column() == 3: if type(item.start_time) is datetime: return item.start_time.strftime(STR_DATE_TIME_FORMAT) return "-" elif index.column() == 4: if type(item.end_time) is datetime: return item.end_time.strftime(STR_DATE_TIME_FORMAT) return "-" elif index.column() == 5: return item.codec else: return QVariant() elif role == Qt.DecorationRole: item = self.file_items[index.row()] if index.column() == 0: return QFileIconProvider().icon(item.file_info)
def file_icon_get(filename: str): ext = os.path.splitext(filename)[-1] type_file = TYPE_FILE_PATH + ext if os.path.exists(type_file) is False: type_file = TYPE_FILE_PATH + "unknown" file_info = QFileInfo(type_file) return QFileIconProvider().icon(file_info)
def data(self, role=Qt.DisplayRole, *args, **kwargs): if role == Qt.DisplayRole: value = self.collapsed_format(self.value) if isinstance(value, str) and value.isnumeric(): value = int(value) if self.field == 'file': value = os.path.basename(value) return value elif role == Qt.DecorationRole: if self.field == 'file': icon_type = QFileIconProvider.File return QFileIconProvider().icon(icon_type) elif role == Qt.ToolTipRole: if len(self.value) > 1: return json.dumps(self.value) elif role == Qt.EditRole: return json.dumps(self.value) elif role == Qt.FontRole: fontdb = QFontDatabase() if self.field == 'key': return fontdb.systemFont(QFontDatabase.FixedFont) else: return fontdb.systemFont(QFontDatabase.GeneralFont) elif role == Qt.UserRole: return self.value
def listdir(abs_path, include_conceal=True): provider = QFileIconProvider() try: list_dir = os.listdir(abs_path) except Exception as e: return [] list_dir.sort() file_list = list() for file in list_dir: item_file = Dict() if file.startswith(".") and not include_conceal: continue abs_file_path = os.path.join(abs_path, file) item_file.name = file item_file.type = provider.type(QFileInfo(abs_file_path)) try: mtime = os.path.getmtime(abs_file_path) item_file.last_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(mtime))) except Exception: item_file.last_time = "" try: if item_file.type in ["File Folder", "Folder"]: item_file.size = "" item_file.raw_size = 0 else: size, unit, s = file_size(abs_file_path) item_file.size = str(size) + " " + unit except Exception: item_file.raw_size = 0 item_file.size = "" file_list.append(item_file) Sort_Dict = {1: "type", 2: "name", 3: "last_time", 4: "raw_size"} file_list = sorted(file_list, key=lambda x: x[Sort_Dict[1]], reverse=False) return file_list
def __init__(self, gateway, folder_name, data, parent): super(HistoryItemWidget, self).__init__() self.gateway = gateway self.data = data self.parent = parent self.path = data['path'] self.size = data['size'] self.action = data['action'] self.mtime = data['mtime'] self._thumbnail_loaded = False self.setAutoFillBackground(True) directory = self.gateway.get_magic_folder_directory(folder_name) if directory: self.path = os.path.join(directory, self.path) self.basename = os.path.basename(os.path.normpath(self.path)) self.setToolTip("{}\n\nSize: {}\nModified: {}".format( self.path, naturalsize(self.size), time.ctime(self.mtime))) self.icon = QLabel() self.icon.setPixmap(QFileIconProvider().icon(QFileInfo( self.path)).pixmap(48, 48)) self.basename_label = QLabel(self.basename) font = QFont() if sys.platform == 'darwin': font.setPointSize(15) else: font.setPointSize(11) self.basename_label.setFont(font) self.details_label = QLabel() font = QFont() if sys.platform == 'darwin': font.setPointSize(13) else: font.setPointSize(10) self.details_label.setFont(font) self.details_label.setStyleSheet('color: grey') self.button = QPushButton() self.button.setIcon(QIcon(resource('dots-horizontal-triple.png'))) self.button.setStyleSheet('border: none;') self.button.clicked.connect(self.parent.on_right_click) self.button.hide() self.layout = QGridLayout(self) self.layout.addWidget(self.icon, 1, 1, 2, 2) self.layout.addWidget(self.basename_label, 1, 3) self.layout.addWidget(self.details_label, 2, 3) self.layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 4, 4) self.layout.addWidget(self.button, 1, 5, 2, 2) self.update_text() QTimer.singleShot(50, self.load_thumbnail)
def setFileIcon(self, path): "每当txtPath的值改变时,就设置快捷方式的图标" fi = QFileInfo(path) if not fi.exists(): self.shortcutIcon = QIcon(":/images/unknown.png") else: ip = QFileIconProvider() self.shortcutIcon = ip.icon(fi) self.btnFace.setIcon(self.shortcutIcon)
def __init__(self, gateway, folder_name, data, parent): super().__init__() self.gateway = gateway self.data = data self.parent = parent self.path = data["path"] self.size = data["size"] self.action = data["action"] self.mtime = data["mtime"] self._thumbnail_loaded = False self.setAutoFillBackground(True) directory = self.gateway.get_magic_folder_directory(folder_name) if directory: self.path = os.path.join(directory, self.path) self.basename = os.path.basename(os.path.normpath(self.path)) self.setToolTip( "{}\n\nSize: {}\nModified: {}".format( self.path, naturalsize(self.size), time.ctime(self.mtime) ) ) self.icon = QLabel() self.icon.setPixmap( QFileIconProvider().icon(QFileInfo(self.path)).pixmap(48, 48) ) self.basename_label = QLabel(self.basename) self.basename_label.setFont(Font(11)) self.details_label = QLabel() self.details_label.setFont(Font(10)) palette = self.palette() dimmer_grey = BlendedColor( palette.text().color(), palette.base().color(), 0.6 ).name() self.details_label.setStyleSheet("color: {}".format(dimmer_grey)) self.button = QPushButton() self.button.setIcon(QIcon(resource("dots-horizontal-triple.png"))) self.button.setStyleSheet("border: none;") self.button.clicked.connect(self.parent.on_right_click) self.button.hide() self.layout = QGridLayout(self) self.layout.addWidget(self.icon, 1, 1, 2, 2) self.layout.addWidget(self.basename_label, 1, 3) self.layout.addWidget(self.details_label, 2, 3) self.layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 4, 4) self.layout.addWidget(self.button, 1, 5, 2, 2) self.update_text() QTimer.singleShot(50, self.load_thumbnail)
def parseLocalFile(self, parent, name, path): if name[0] == '.': return tmp = QTreeWidgetItem(parent) fileInfo = QFileInfo(path) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) tmp.setIcon(0, QIcon(icon)) tmp.setText(0, name) tmp.setText(1, os.path.split(path)[0])
def update_folder_icon(self, folder_name, folder_path, overlay_file=None): items = self.findItems(folder_name) if items: folder_icon = QFileIconProvider().icon(QFileInfo(folder_path)) folder_pixmap = folder_icon.pixmap(256, 256) if overlay_file: pixmap = CompositePixmap(folder_pixmap, resource(overlay_file)) else: pixmap = CompositePixmap(folder_pixmap) items[0].setIcon(QIcon(pixmap))
def dragFile(widget, filename, icon=None, dropactions=Qt.CopyAction): """Starts dragging the given local file from the widget.""" if icon is None or icon.isNull(): icon = QFileIconProvider().icon(QFileInfo(filename)) drag = QDrag(widget) data = QMimeData() data.setUrls([QUrl.fromLocalFile(filename)]) drag.setMimeData(data) drag.setPixmap(icon.pixmap(32)) drag.exec_(dropactions)
def CreateTree(self, dirs, root, path): for i in dirs: path_new = path + '/' + i if os.path.isdir(path_new): fileInfo = QFileInfo(path_new) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) child = QTreeWidgetItem(root) child.setText(0, i) child.setIcon(0, QIcon(icon)) dirs_new = file_name(path_new) self.CreateTree(dirs_new, child, path_new) else: fileInfo = QFileInfo(path_new) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) child = QTreeWidgetItem(root) child.setText(0, i) child.setIcon(0, QIcon(icon))
def Update(self, file): # TODO: wtf is this? iconprovider = QFileIconProvider() fileinfo = QFileInfo(str(file)) icon = iconprovider.icon(fileinfo) iconsize = QSize(self.x, self.y) self.widget = QLabel() self.widget.setPixmap(icon.pixmap(iconsize))
def icon_types(_file, icon: bool = False): file_type = os.path.splitext(os.path.split(_file)[1])[1].strip(".") ## set image/video icon if file_type in json.load(open(base_dir + "api/icons.json")).get("image"): return QIcon(_file) ## Default System Icons else: fileInfo = QFileInfo(_file) iconProvider = QFileIconProvider() icon = iconProvider.icon(fileInfo) return icon
def add_item(row, column, item): self.tableWidget_6.setItem( row, column, QtWidgets.QTableWidgetItem(str(item))) self.tableWidget_6.item(row, column).setTextAlignment( Qt.AlignHCenter | Qt.AlignVCenter) if column == 1: file_info = QFileInfo(str(item)) iconProvider = QFileIconProvider() icon = iconProvider.icon(file_info) self.tableWidget_6.item(row, column).setIcon(icon) self.tableWidget_6.item(row, column).setTextAlignment( Qt.AlignLeft | Qt.AlignVCenter)
def _assign_icon(filename, is_dir): if filename.endswith("py"): # py and mpy icon = Icons().tree_python else: iconProvider = QFileIconProvider() if is_dir: fileInfo = iconProvider.Folder else: fileInfo = QFileInfo(filename) icon = iconProvider.icon(fileInfo) return icon
def __init__(self, data_group, res, extended_selection): """Init the class Args: data_group (HDF5 grup): HDF5 group res (qt resolution): size of the app extended_selection (bool): allow multiple selection """ super().__init__() self.root_item = None self.data_group = data_group self.iconProvider = QFileIconProvider() self.res = res self.extended_selection = extended_selection
def __init__(self, name, conn, path, is_dir, size): super(RemoteFileSystemNode, self).__init__(name) self._name = name self._conn = conn self.path = path self._is_dir = is_dir self._populated = not is_dir self._show_hidden_files = False self.size_item = QStandardItem(sizeof_fmt(size) if not is_dir else '') icon_provider = QFileIconProvider() if is_dir: self.setData(True, RemoteFileSystem.ExpandableRole) self.setIcon(icon_provider.icon(QFileIconProvider.Folder)) else: self.setIcon(icon_provider.icon(QFileIconProvider.File))
def add_file(self, file_objects, clear=True): if clear: self.listview.clear() if not file_objects: item = QListWidgetItem("No files has the selected tag") item.setFlags(Qt.NoItemFlags) self.listview.addItem(item) for object in file_objects: item = QListWidgetItem(object.file_name) item.setData(Qt.UserRole, object) fileinfo = QFileInfo(object.file_path + "/" + object.file_name) iconprovider = QFileIconProvider() icon = iconprovider.icon(fileinfo) item.setIcon(icon) self.listview.addItem(item)
def check_icon_path(self, item): if item["type"] in (2, 4): if not os.path.exists(item["ico"]): save_path = get_file_realpath( os.path.join("data/image/sysico", os.path.splitext(item["url"])[1][1:] + ".ico")) print("save_path:" + save_path) provider = QFileIconProvider() fi = QFileInfo(item["url"]) icon = provider.icon(fi) icon.pixmap(48).save(save_path) item["ico"] = save_path if item["type"] == 1: if not os.path.exists(item["ico"]): item["ico"] = get_file_realpath("data/image/firefox64.png")
def open_files_clicked(self): files = QFileDialog.getOpenFileNames( self, self.tr("Select files"), "", "PDF file (*.pdf) ;; All files (*.*)")[0] provider = QFileIconProvider() self.list_widget.clear() for file_path in files: file = QFileInfo(file_path) item = QListWidgetItem() item.setText(file.baseName()) item.setData(Qt.UserRole, file_path) item.setIcon(provider.icon(file)) self.list_widget.addItem(item) self.label_find.setText( self.tr("Schedules: ") + str(self.list_widget.count()))
def set_tree(self): self.tree.clear() path = read_line(configure_file, 1)[:-1] print("+" * 10 + path) dirs = file_name(path) print(dirs) fileInfo = QFileInfo(path) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) root = QTreeWidgetItem(self.tree) root.setText(0, path.split('/')[-1]) root.setIcon(0, QIcon(icon)) self.CreateTree(dirs, root, path) self.tree.expandAll() # self.setCentralWidget(self.tree) # self.tree.clicked.connect(self.onTreeClicked) QApplication.processEvents()
def parseLocalDir(self, parent, name, path): tmp = QTreeWidgetItem(parent) fileInfo = QFileInfo(path) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) tmp.setIcon(0, QIcon(icon)) tmp.setText(0, name) tmp.setText(1, path) new = QTreeWidgetItem(tmp) new.setText(0, "<NEW DIR>") new.setText(1, path) for item in os.listdir(path): item_path = os.path.join(path, item) if os.path.isdir(item_path): self.parseLocalDir(parent=tmp, name=item, path=item_path) if os.path.isfile(item_path): self.parseLocalFile(parent=tmp, name=item, path=item_path)
def getShortcutIcon(shortcut): if shortcut["icon"]: icon = QIcon(shortcut["icon"]) if not icon.isNull(): return icon iconProvider = QFileIconProvider() if shortcut["path"] == COMPUTER_PATH: return QIcon(":/images/user-home.png") elif shortcut["path"] == DOCUMENTS_PATH: documentsIcon = iconProvider.icon( QFileInfo( QStandardPaths.writableLocation( QStandardPaths.DocumentsLocation))) if documentsIcon.isNull(): return QIcon(":/images/folder-documents.png") else: return documentsIcon elif shortcut["path"] == MUSIC_PATH: musicIcon = iconProvider.icon( QFileInfo( QStandardPaths.writableLocation(QStandardPaths.MusicLocation))) if musicIcon.isNull(): return QIcon(":/images/folder-sound.png") else: return musicIcon elif shortcut["path"] == PICTURES_PATH: picturesIcon = iconProvider.icon( QFileInfo( QStandardPaths.writableLocation( QStandardPaths.PicturesLocation))) if picturesIcon.isNull(): return QIcon(":/images/folder-image.png") else: return picturesIcon else: url = QUrl.fromUserInput(shortcut["path"]) if url.scheme() == "file": if os.path.exists(shortcut["path"]): icon = iconProvider.icon(QFileInfo(url.toLocalFile())) if not icon.isNull(): return icon return QIcon(":/images/unknown.png") else: return QIcon(":/images/httpurl.png") return QIcon(":/images/unknown.png")
def __updateRow(self, itm=None): """ Private slot to update a download item. @param itm reference to the download item (DownloadItem) """ if itm is None: itm = self.sender() if itm not in self.__downloads: return row = self.__downloads.index(itm) if self.__iconProvider is None: self.__iconProvider = QFileIconProvider() icon = self.__iconProvider.icon(QFileInfo(itm.fileName())) if icon.isNull(): icon = self.style().standardIcon(QStyle.SP_FileIcon) itm.setIcon(icon) oldHeight = self.downloadsView.rowHeight(row) self.downloadsView.setRowHeight( row, max(oldHeight, itm.minimumSizeHint().height() * 1.5)) remove = False globalSettings = QWebSettings.globalSettings() if not itm.downloading() and \ globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): remove = True if itm.downloadedSuccessfully() and \ self.removePolicy() == DownloadManager.RemoveSuccessFullDownload: remove = True if remove: self.__model.removeRow(row) self.cleanupButton.setEnabled( (len(self.__downloads) - self.activeDownloads()) > 0) # record the change self.changeOccurred()
def insertFiles(self, files): self.listfiles.clear() if len(files) == 0: return self.__storeFilePath(files[0]) fileInfo = QFileInfo(files[0]) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) #获取文件图标 for index, item in enumerate(files): name = os.path.basename(item) value = QListWidgetItem(icon, name) self.listfiles.insertItem(index, value)
def data(self, role=Qt.DisplayRole, *args, **kwargs): if self.column != 0: return self.column_data(role, *args, **kwargs) if role == Qt.DisplayRole: return os.path.basename(self.path) elif role == Qt.DecorationRole: icon_type = QFileIconProvider.Folder return QFileIconProvider().icon(icon_type) elif role == Qt.ToolTipRole: if self.path != os.path.basename(self.path): return self.path elif role == Qt.FontRole: fontdb = QFontDatabase() return fontdb.systemFont(QFontDatabase.GeneralFont)
def keyReleaseEvent(self,event): key = event.key() if event.modifiers()== Qt.ControlModifier and key == Qt.Key_V : clipboard = QApplication.clipboard() mimeData = clipboard.mimeData() if mimeData.hasText(): print("准备粘贴:" + clipboard.text()) path = clipboard.text() item = {} if not path.startswith("file") : item = self.dl_launch_item_detail.get_url_info(path) item["session_id"] = self.cur_session["id"] item["id"] = app_data.insert_launch_item(item) self.add_launch_item(item) return path = path.replace("file:///","") if os.name == "posix" : path = "/" + path provider = QFileIconProvider() fi = QFileInfo(path) icon = provider.icon(fi) # t = icon.pixmap().toImage().text() save_path = join(config_dir ,"data/image/sysico",splitext(path)[0]+".ico") print("save_path:" + save_path) icon.pixmap(48).save(save_path) t = icon.name() t1 = icon.themeName() t2 = icon.themeSearchPaths() print("icon path:" + t+"," + t1,t2) if not icon.isNull() : item["ico"] = save_path item["name"] = basename(path) item["url"] = path item["type"] = 2 if not self.cur_session["id"]: QMessageBox.information(self, "新桌面", "新桌面需重启后才能添加启动项") return item["session_id"] = self.cur_session["id"] print("add other launch item:" ,item) item["id"] = app_data.insert_launch_item(item) print(item) self.add_launch_item(item)
def changeFileIcon(self): "用户点击了更换图标按钮。" filename, selectedFilter = QFileDialog.getOpenFileName( self, self.windowTitle()) if not filename: return image = QImage(filename) if not image.isNull(): self.shortcutIcon = QIcon(QPixmap.fromImage(image)) else: ip = QFileIconProvider() shortcutIcon = ip.icon(QFileInfo(filename)) if shortcutIcon.isNull(): QMessageBox.information(self, self.tr("更换图标"), self.tr("您选择的文件不包含任何可以使用的图标。")) return self.shortcutIcon = shortcutIcon self.iconPath = filename self.btnFace.setIcon(self.shortcutIcon)
def __init__(self, rows, columns, parent=None): super(Model, self).__init__(parent) self.services = QIcon(images_dir + "/services.png") self.rc = rows self.cc = columns self.tree = [Node() for node in range(rows)] self.iconProvider = QFileIconProvider()