Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

DialogBox PyQt qui freeze durant long process

+3 votes

Comment fermer une QFileDialog OpenFileNames sans attendre la fin d'un long process qui suit l'ouverture des fichiers (il s'agit d'une application console sans autre GUI) ?

Je ne parviens pas à résoudre ce problème même en passant par des Thread ou QThread :

import time
import sys
from threading import Thread
from PyQt4 import QtGui
from PyQt4.QtCore import QThread

class process(QThread):
    def __init__(self, files):
        QThread.__init__(self)
        self.files = files

    def run(self):
        print(self.files)
        # simule un long process sur les fichiers
        for i in range(5):
            print(i)
            time.sleep(1)

app = QtGui.QApplication(sys.argv)
files = QtGui.QFileDialog.getOpenFileNames()

thread = process(files)
thread.start()
thread.wait()
demandé 9-Mar-2016 par astacus

Si c'est long c'est qu'il y a une raison. Y a -t-il des erreurs ? Combien de fichiers sont ouverts ? Quel est leur poids ?
Apres l'ouverture des fichiers, qu'est il sensé se passer ?

Dans mon cas c'est un processus externe qui traite les fichiers qui lui sont passés en arguments (lecteur multimédia lancé en tant que processus enfant). Il n'y a donc pas de blocage IO, ou de rapport avec le poids ou le nombre de fichiers car les ils ne sont pas ouverts par mon programme.

Pas d'erreur, juste la DialogBox qui freeze jusqu'à la fin du second thread.

Mais le problème serait le même s'il s'agissait d'un long traitement arithmétique en interne comme simulé ici.

Donc est-il possible de faire fonctionner sans freeze l'exemple que j'ai donné ?

Ton exemple ne freeze absolument pas chez moi.

@yoch: pourrais-tu préciser ton environnement ?

Sous Linux x64 (Ubuntu 14.04 à 16.04) ça freeze.
(python 3.4.4 + libqt4-dev 4.8.7 + python3-pyqt4 4.11.4)

Par contre je viens de tester sous Windows 7 SANS freeze !
(python-3.4.4.amd64 + PyQt4-4.11.4-gpl-Py3.4-Qt4.8.7-x64)

Ne tournant pas sous Windows, ça ne résout pas mon problème...
Je suis donc toujours à l’affût d'une astuce pour pouvoir utiliser proprement cette jolie DialogBox.

Je suis également sous Windows (python 3.3). Mais ça ne devrait freezer nulle part en principe, peux-tu préciser stp de quelle façon tu lance ton script.

La façon de lancer le script ne change rien (./test.py avec le shebang qui va bien à la 1ère ligne ou directement python3 test.py) :'(

1 Réponse

+1 vote

Le problème est du aux boites de dialogue natives sous environnement GTK : même comportement sous Linux Mint, mais pas sous Kubuntu.

Ça fonctionne aussi sous debian 8 (KDE 4) et OpenSuse (KDE 5) tout en affichant en console des messages d'erreurs non-bloquants ("...unknown mimetype...ms-word|excel...").

Bref, en passant "options=QtGui.QFileDialog.DontUseNativeDialog" à la fonction getOpenFileNames() : plus de freeze ou d'erreurs.

répondu 11-Mar-2016 par astacus
...