Bonjour à tous,

Je cherche à réaliser un simple widget permettant d'explorer mes disques (locaux et reseaux).
Pour faire simple, j'ai 3 listView pour les disques/dossiers/fichiers et je voudrais que lorsque je clique sur un disque/dossier, ca met à jour la liste dossier/fichier.

J'etais parti pour utiliser QDirModel mais, d' après la doc, il vaut mieux utiliser la classe QFileSystemModel.. Je ne parviens pas à réaliser ce que je veux.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
import sys,os
from PyQt4.QtGui import *
from PyQt4.QtCore import *
 
class viewDir(QWidget):
	def __init__(self,parent=None):
		super(viewDir,self).__init__(parent)
		self.vGrid = QVBoxLayout()
		self.setLayout(self.vGrid)
 
		self.diskModel = QFileSystemModel()
		self.diskModel.setFilter(QDir.Drives)
		self.diskModel.setRootPath(QDir.currentPath())
 
		self.dirModel = QFileSystemModel()
		self.dirModel.setFilter(QDir.AllDirs)
 
		self.fileModel = QFileSystemModel()
		self.fileModel.setFilter(QDir.Files)
 
 
		self.listDisks = QListView()
		self.listDisks.setModel(self.diskModel)
		self.listDisks.setRootIndex(self.fileModel.index(QDir.currentPath()))
 
		self.listDirs = QListView()		
		self.listFiles = QListView()
 
		self.vGrid.addWidget(self.listDisks)
		self.vGrid.addWidget(self.listDirs)
		self.vGrid.addWidget(self.listFiles)
 
		self.connect(self.listDisks,SIGNAL("clicked (const QModelIndex&)"),lambda : self.changeDisk())
 
	def changeDisk(self):
		d= self.diskModel.filePath(self.listDisks.currentIndex())
		self.dirModel.setRootPath(d)
		self.dirModel.setFilter(QDir.AllDirs)
		self.listDirs.setModel(self.dirModel)
 
if __name__=="__main__":
		app=QApplication(sys.argv)
		app.setPalette(QApplication.style().standardPalette())
		ui=viewDir()
		ui.show()
 
		sys.exit(app.exec_())
Quand je clique sur un disque, je n'ai pas la visu de mes dossiers.
Pouvez vous m'indiquer la manière de procéder??

Un autre soucis, je souhaite avoir le chemin réseau d'un disque? comment puis je l'obtenir?

Merci