2017-07-17 2 views
-1

J'essaie de faire une barre de progression pour travailler sur mon application de test très simple en pyqt mais malheureusement je n'ai aucune idée sur la façon de mettre en œuvre certains des examples que j'ai vu comme ils vont sur ma tête alors s'il vous plaît supporter avec ma question de débutant.Une façon simpliste d'expliquer la barre de progression PyQt pour les débutants

Disons que j'ai un très simple QMainWindow

class Window(QtGui.QMainWindow): 

    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(750, 450, 400, 200) 
     self.setFixedSize(self.size()) 
     btn1 = QtGui.QPushButton("Convert", self) 
     btn1.move(210,171) 
     btn1.clicked.connect(self.output_convert) 

    def output_convert(self): 
     #very long process to convert a txt file to excel 
     #Here is where I would like to implement a progress bar 

def run(): 
    app = QtGui.QApplication(sys.argv) 
    GUI = Window() 
    app.exec_() 

run() 

Comment puis-je mettre en œuvre au moins une barre de progression pulser dans le output_convert? Ce qui me dérange vraiment, c'est comment puis-je appeler/exécuter les codes dans le example. Puis-je le faire sans sous-classe et purement dans une fonction? cela dépend-il du code output_convert? TLDR: Comment puis-je implémenter une barre de progression lors de l'exécution d'un code très long (newbie friendly)?

MISE À JOUR 1 Après une journée entière, je l'ai eu de travail est en partie ici mon code

class Window(QtGui.QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(750, 450, 400, 200) 
     self.setFixedSize(self.size()) 
     btn1 = QtGui.QPushButton("Convert", self) 
     btn1.move(210,171) 
     btn1.clicked.connect(self.progbar) 

    def progbar (self): 
     self.prog_win = QDialog() 
     self.prog_win.resize(400, 100) 
     self.prog_win.setFixedSize(self.prog_win.size()) 
     self.prog_win.setWindowTitle("Processing request") 
     self.lbl = QLabel(self.prog_win) 
     self.lbl.setText("Please Wait. . .") 
     self.lbl.move(15,18) 
     self.progressBar = QtGui.QProgressBar(self.prog_win) 
     self.progressBar.resize(410, 25) 
     self.progressBar.move(15, 40) 
     self.progressBar.setRange(0,1) 
     self.myLongTask = TaskThread() 

     #I think this is where I am wrong 
     self.prog_win.show() 
     self.myLongTask.taskFinished.connect(self.onStart) 
     self.output_settings() 

    def onStart(self): 
     self.progressBar.setRange(0,0) 
     self.myLongTask.start() 

    def output_convert(self): 
     #very long process to convert a txt file to excel 

class TaskThread(QtCore.QThread): 
    taskFinished = QtCore.pyqtSignal() 
    def run(self): 
     time.sleep(3) 
     self.taskFinished.emit() 

def run(): 
    app = QtGui.QApplication(sys.argv) 
    GUI = Window() 
    app.exec_() 
run() 

Je peux maintenant voir ce que je manque et ce que je vraiment besoin est Threading. J'ai lu autour et tout le monde a dit qu'il a besoin de multithread et sous-classement est une mauvaise idée. Il fonctionne partiellement lorsque la barre de progression se bloque pendant le traitement.

Répondre

0
 self.progressBar = QtWidgets.QProgressBar(self.centralWidget) 
     self.progressBar.setGeometry(QtCore.QRect(150, 140, 481, 37)) 
     self.progressBar.setStyleSheet("your values") 
     self.progressBar.setProperty("value", 70) 
     self.progressBar.setObjectName("progressBar") 

C'est le code de la barre de progression, je l'ai utilisé, La première ligne définit le type de QtWidget, dans notre cas, la barre de progression et il faut l'argument, un widget central, ce qui montre que ce sera une partie du widget central, définir la géométrie est le positionnement et la taille. La feuille de style définie est l'endroit où vous spécifiez la couleur et tout le reste. La fonction set property permet de définir la valeur ou le remplissage de la barre de progression, c'est ce que vous voulez faire varier.

La plupart du temps, ce widget dépend de l'OS. C'est-à-dire que si vous utilisez Windows, la barre de progression des fenêtres est activée par défaut. Mais dans d'autres systèmes d'exploitation, par exemple Linux, vous devrez définir le style par défaut des widgets en utilisant la fonction setstyle().

+0

Je n'étais pas au courant de 'setstyle()' merci car je prévoyais de distribuer une application multiplateforme. Bien que cela ne réponde pas vraiment à mon problème sur la façon dont je l'implémenterais dans un très long processus. avez-vous des sources faciles à comprendre? –