0

对于我的 PyQT5 应用程序,我正在执行一个大型 DataFrame swifter 应用程序,这可能需要一小段时间。在此期间,我的应用程序在窗口标题栏中显示“(未响应)”消息。

当 swifter 应用在​​后台运行时 - 在控制台中显示如下: 更快的百分比条输出

是否可以从 swifter 中提取当前百分比并将其传递到百分比栏?

代码的简化版本(有进度条,但它只是从范围循环中显示):

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QProgressDialog
from PyQt5.QtCore import pyqtSlot
import pandas as pd
import numpy as np
import swifter



class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 button - pythonspot.com'
        self.left = 10
        self.top = 10
        self.width = 320
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        button = QPushButton('PyQt5 button', self)
        button.setToolTip('This is an example button')
        button.move(100, 70)
        button.clicked.connect(self.on_click)

        self.show()

    @pyqtSlot()
    def on_click(self):
        df = pd.DataFrame(np.random.randint(0, 100, size=(10000, 4)), columns=list('ABCD'))
        #swifter call below stops gui with high computation and would like to extract percentage from.
        df['A'] = df.A.swifter.progress_bar(True).apply(getx) 
        self.progress_bar()

    def progress_bar(self):
        percentage = QProgressDialog(self)
        percentage.show()
        for x in range(0,100):
            percentage.setValue(x+1)
        percentage.close()

def getx(x):
    x = np.random.randint(0, 100000)
    return x

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
4

0 回答 0