TMikonos
TMikonos

Reputation: 369

Getting a Blank Progress bar window pyqt 5

I am trying to make work a progress bar with pyqt5 however when I open the Window of the progress bar I am getting a blank windows.

The code for the progress bar generated from the ui is:

Ui_dlg_progress generated from the ui:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_dlg_progress(object):
    def setupUi(self, dlg_progress):
        dlg_progress.setObjectName("dlg_progress")
        dlg_progress.resize(376, 91)
        dlg_progress.setSizeGripEnabled(True)
        self.gridLayout = QtWidgets.QGridLayout(dlg_progress)
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtWidgets.QLabel(dlg_progress)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.label_num_folders = QtWidgets.QLabel(dlg_progress)
        self.label_num_folders.setObjectName("label_num_folders")
        self.gridLayout.addWidget(self.label_num_folders, 0, 1, 1, 1)
        self.label_text = QtWidgets.QLabel(dlg_progress)
        self.label_text.setObjectName("label_text")
        self.gridLayout.addWidget(self.label_text, 0, 2, 1, 1)
        self.label_total_folders = QtWidgets.QLabel(dlg_progress)
        self.label_total_folders.setObjectName("label_total_folders")
        self.gridLayout.addWidget(self.label_total_folders, 0, 3, 1, 1)
        self.progressBar = QtWidgets.QProgressBar(dlg_progress)
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 4)

        self.retranslateUi(dlg_progress)
        QtCore.QMetaObject.connectSlotsByName(dlg_progress)

    def retranslateUi(self, dlg_progress):
        _translate = QtCore.QCoreApplication.translate
        dlg_progress.setWindowTitle(_translate("dlg_progress", "Processing"))
        self.label.setText(_translate("dlg_progress", "Processing:"))
        self.label_num_folders.setText(_translate("dlg_progress", "0"))
        self.label_text.setText(_translate("dlg_progress", "folders of a total of: "))
        self.label_total_folders.setText(_translate("dlg_progress", "1"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    dlg_progress = QtWidgets.QDialog()
    ui = Ui_dlg_progress()
    ui.setupUi(dlg_progress)
    dlg_progress.show()

ProgressBar.py - Calls Ui_dlg_progress

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog

from Ui_progress_bar import Ui_dlg_progress


class dlg_progress(QDialog, Ui_dlg_progress):
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor

        @param parent reference to the parent widget
        @type QWidget
        """
        super(dlg_progress, self).__init__(parent)
        self.setupUi(self)
        self.show()

And the main code where is called the progress bar:

def main():

    subdirs = [f for f in source.iterdir() if f.is_dir()]
    if len(subdirs) == 0:
        return -1
    prog = dlg_progress()
    #Actual number of folders procecessed
    proc_folders = 0
    prog.progressBar.setValue(proc_folders)
    prog.label_num_folders.setText(str(proc_folders)) 
    prog.label_total_folders.setText(str(len(subdirs)))
    prog.progressBar.maximum = len(subdirs)
    for subdir in subdirs:
        process of the folders
        #Number of processed folders

        proc_folders += 1
        prog.setValue(proc_folders)
        prog.label_num_folders.setText(str(proc_folders))             
        QApplication.processEvents()
    return 0

Upvotes: 0

Views: 1099

Answers (1)

PRMoureu
PRMoureu

Reputation: 13327

It just looks like a typo in the last loop :

for subdir in subdirs:
    #Number of processed folders

    proc_folders += 1
    prog.progressBar.setValue(proc_folders)
    prog.label_num_folders.setText(str(proc_folders))             
    QApplication.processEvents()

Otherwise, you should test the source and the length of generated list, if it's empty, the loop won't start, and the progressbar will stay at 0.

Upvotes: 2

Related Questions