1) Je souhaite obtenir le nom du dossier d'une application de surveillance des dossiers. Y a-t-il une façon de filtrer des dossiers spécifiques d'être affichés à l'aide de qfiledialog (par exemple, je ne veux pas que mes documents soient affichés dans la boîte de dialogue Fichier) ..
2) Je ne veux pas que l'utilisateur Sélectionnez un lecteur. Par défaut dans ce code, les lecteurs peuvent également être sélectionnés .. P>
dirname=QtGui.QFileDialog.getExistingDirectory(self,'Open Directory','c:\\',QtGui.QFileDialog.ShowDirsOnly) print(dirname)
4 Réponses :
Vous pouvez essayer d'utiliser le filtre qdir.dirs.
Merci apt à votre réponse. Mais ça va répertorier tous les répertoires .. Ici, je veux énumérer uniquement les répertoires patriculaires..Le code ci-dessus fait aussi la même chose. Ma question est comme un filtre d'extension de fichier y a-t-il un filtre pour les répertoires ?? Et une autre question est là une façon de désactiver le "bouton OK dans qfiledialog" lorsque l'utilisateur sélectionne un répertoire de langue.
Vous pouvez essayer de définir un modèle proxy pour votre boîte de dialogue de fichier: Qfiledialog :: SetProxymodel . Dans la classe de modèle de proxy remplace le Filteracceptsrow Méthode et renvoyer false pour les dossiers que vous ne voulez pas être montré. Vous trouverez ci-dessous un exemple de la façon dont le modèle proxy peut ressembler; IT'C C ++, laissez-moi savoir s'il y a des problèmes de conversion de ce code en Python. Ce modèle est censé filtrer des fichiers et montrer uniquement des dossiers: Voici comment je l'appelais p> Notez que le modèle proxy est pris en charge par des boîtes de dialogue de fichiers non natives uniquement. p> p>
Serge_gubenko vous a donné la bonne réponse. Vous n'avez qu'à vérifier les noms de dossiers et à renvoyer "False" pour ceux qui ne doivent pas être affichés. Par exemple, pour filtrer tous les dossiers nommés "Private" Vous écririez:
bool FileFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
QFileSystemModel* fileModel = qobject_cast<QFileSystemModel*>(sourceModel());
if (fileModel!=NULL && fileModel->isDir(index0))
{
qDebug() << fileModel->fileName(index0);
if (QString::compare(fileModel->fileName(index0), tr("private")) == 0)
return false;
return true;
}
else
return false;
// uncomment to execute default implementation
//return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
}
Je sais que ce n'est pas exactement ce que vous demandiez, mais si vous travaillez avec un QFileSystemModel, vous pouvez le faire avec l'option Name Filters.
model = QFileSystemModel() model.setNameFilters(["[abcdefghijklmnopqrstuvwxyz1234567890]*"]) model.setNameFilterDisables(False)