PyQt Progressbar QThread не работает при рендеринге графика

Я посмотрел на этот ответ здесь, который был очень полезен, но он не работает как ожидается при попытке отрисовки сюжета.

График работает, но индикатор выполнения не продвигается, он просто поднимется до 100 % после рендеринга графика. Конечно, мне бы хотелось, чтобы индикатор выполнения прогрессировал во время рендеринга сюжета, а не после его завершения.

Я думаю, что мне может не хватать функции PyQt, чтобы как-то связать событие или сигнал pyqt, но на самом деле я понятия не имею, как это исправить.

Вот, кем я надеюсь стать, минимальный, полный и поддающийся проверке пример:

import sys
from pandas.tools.plotting import scatter_matrix
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import time

from PyQt5.QtWidgets import (QWidget, QProgressBar, 
    QPushButton, QApplication, QVBoxLayout)
from PyQt5 import QtCore, QtGui

class MyCustomWidget(QWidget):

    def __init__(self, parent=None):
        super(MyCustomWidget, self).__init__(parent)
        layout = QVBoxLayout(self)

        self.progressBar = QProgressBar(self)
        self.progressBar.setRange(0,1)
        layout.addWidget(self.progressBar)
        self.count = 0
        button = QPushButton("Start", self)
        layout.addWidget(button)
        self.df = pd.DataFrame(np.random.rand(3, 12))

        button.clicked.connect(self.onStart)

        self.myLongTask = TaskThread()
        self.myLongTask.taskFinished.connect(self.onFinished)

        self.show()

    def onStart(self):
        scatter_matrix(self.df, alpha=0.8, figsize=(7, 7), diagonal='kde')
        self.scatter = plt
        self.scatter.suptitle('Data Scatter Matrix Plot', size=16)
        self.progressBar.setRange(0,0)
        self.progressBar.setValue(1)
        self.myLongTask.start()
        self.scatter.show()

    def onFinished(self):
        self.progressBar.setRange(0,1)


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

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = MyCustomWidget()
    sys.exit(app.exec_())

person Joe T. Boka    schedule 13.11.2017    source источник
comment
В чем проблема?   -  person eyllanesc    schedule 13.11.2017
comment
@eyllanesc Спасибо, я отредактировал вопрос, объясняющий проблему.   -  person Joe T. Boka    schedule 13.11.2017
comment
То, что я вижу, это то, что это будет варьироваться только на одну единицу.   -  person eyllanesc    schedule 13.11.2017
comment
И это правильно меняется, так как вы просто меняете его на 1 в onFinished   -  person eyllanesc    schedule 13.11.2017
comment
@eyllanesc Я пытался изменить это значение, но по какой-то причине оно все равно не работает.   -  person Joe T. Boka    schedule 13.11.2017
comment
Я не понимаю, что вы ожидаете, вы могли бы объяснить подробно.   -  person eyllanesc    schedule 13.11.2017
comment
Как вы хотите, чтобы QProgressBar менялся?   -  person eyllanesc    schedule 13.11.2017
comment
@eyllanesc О, я забыл сохранить свое редактирование ранее, теперь я предоставил немного больше деталей о том, в чем проблема.   -  person Joe T. Boka    schedule 13.11.2017
comment
Вы должны указать прогресс в QProgressBar, QProgressBar не знает, как он меняет процесс построения графика. Например, если я читаю файлы из папки, то процент - это количество прочитанных файлов по отношению к общему количеству файлов, а тот, который вычисляет, - это наш код, и это значение передается, QProgressBar не угадывает процент.   -  person eyllanesc    schedule 13.11.2017
comment
@eyllanesc Да, очевидно, проблема в этом. Можно ли решить эту проблему в подобных сюжетных ситуациях?   -  person Joe T. Boka    schedule 13.11.2017
comment
В примере по вашей ссылке показано, как использовать QProgressBar в качестве индикатора занятости, то есть чанк движется слева направо и справа налево постоянно, пока вы не укажете, что он заканчивается. Это то, что вы хотите?   -  person eyllanesc    schedule 13.11.2017
comment
Отображение процента невозможно, если функция не указывает процент работы.   -  person eyllanesc    schedule 13.11.2017
comment
@eyllanesc Нет, индикатор занятости - это не то, что мне нужно, я бы хотел, чтобы индикатор выполнения двигался только слева направо и постоянно двигался.   -  person Joe T. Boka    schedule 13.11.2017
comment
@eyllanesc Итак, есть ли способ указать процент в функции для графика?   -  person Joe T. Boka    schedule 13.11.2017
comment
Я не знаю никакого метода, и скорее всего его не существует, так как сюжетные библиотеки не заинтересованы в том, чтобы показывать процент прогресса.   -  person eyllanesc    schedule 13.11.2017
comment
Это то, что я думал после нескольких часов попыток заставить эту работу работать. Проблема в том, что эти графики матрицы рассеяния могут занять некоторое время, если данные будут слишком большими. Таким образом, пользователь будет думать, что приложение вылетело после 30 секунд ожидания, и ничего не происходит. Есть ли у вас какие-либо предложения о том, как найти другое решение для этого?   -  person Joe T. Boka    schedule 13.11.2017
comment
Используйте индикатор того, что процесс работает, например, прошедшее время или что он говорит о том, что процесс продолжается.   -  person eyllanesc    schedule 13.11.2017
comment
@eyllanesc Да, я так и сделаю. Большое спасибо за вашу помощь с этой проблемой. Я очень ценю это! Вы всегда очень полезны. Спасибо еще раз.   -  person Joe T. Boka    schedule 13.11.2017