J'ai un arbre que je remplis avec une liste de fichiers depuis mon ordinateur en cliquant sur un bouton. Pendant que le programme remplit l'arborescence, l'interface graphique entière se bloque.
Existe-t-il un moyen de remplir l'arborescence dans un autre thread afin que l'arborescence soit remplie lorsque les fichiers sont trouvés et non lorsque tout a déjà été ajouté? Ou d'autres idées?
Voici à quoi ça ressemble:
Je remplis l'arbre avec ce code:
def traversePaths(self, path, parent):
files = os.listdir(path)
files.sort()
for myfile in files:
if myfile[0] != ".":
if os.path.isdir(path + os.sep + myfile):
current = self.filelist.append(parent,[self.dirIcon,self.dirIcon,self.dirOpenIcon,myfile,"DD",True,True,3])
self.traversePaths(path + os.sep + myfile, current)
else:
current = self.filelist.append(parent,[self.fileIcon,self.dirIcon,self.dirOpenIcon,myfile,"AA",True,True,3])
qui s'exécute sur un clic de bouton:
def on_refreshbutton_clicked(self, button):
self.traversePaths(self.path.get_filename(), None)
Je ne pense pas que threading.Thread fonctionne à cause du thread gtk pour l'interface graphique et ne trouve pas les api gi.repository.Gtk sur le sujet
Des idées?
Lorsque vous posez des questions de programmation, il est toujours préférable de fournir un exemple de travail minimal et pas seulement des extraits de code.
Sans un exemple de travail avec lequel jouer, j'ai les suggestions suivantes:
La raison pour laquelle vous voyez le blocage de l'interface graphique est que le marcheur de fichiers prend très longtemps et chaque fois que vous ajoutez un fichier, beaucoup de surcharge dans Gtk est appelée. En ajoutant un treemodel complet, cette surcharge n'est appelée qu'une seule fois. Et en utilisant un thread pour la marche du fichier, votre interface graphique reste réactive.
Quant à la partie de threading dans Gtk, vous voudrez peut-être regarder ici: https://stackoverflow.com/questions/8120860/python-doing-some-work-on-background-with-gtk-gui =
Quelques notes à votre code:
os.walk