无法找到一种方法来计算用户输入的正确百分比

问题描述 投票:0回答:1

我的程序下载图片,现在我试图使进度条正常工作,但是我找不到一种计算方法,然后将其显示在进度条上的方法。我已经尝试了一些方法,但是我的脚本在尝试计算时只是冻结了。我将PYQT5用于UI上的进度栏。我的目标是计算用户输入以及文件夹中有多少输入,因此,假设它从10个下载了5张图片,然后在进度栏中显示50%。

我尝试过的内容:

 def ProgressBar(self):
    self.complete = 0

    while self.complete < 100:
        self.final_value = self.li_MaxImages // 100
        self.pb_ProgressBar.setValue(complete)

从读取的内容(读取的最大图像输入数量)

def execute_downloader(self):
    s_URL = self.li_Url.text()
    s_Folder = self.li_FolderName.text()
    s_Max = self.li_MaxImages.text()
python python-3.x pyqt pyqt5 percentage
1个回答
0
投票

[当程序进入while循环时,它将阻止事件循环并避免更新UI。

这就是为什么您永远不要在UI部分中使用循环。

最简单的更新进度条的方法是使用信号/插槽来更新它:每次下载文件时发送一个信号,并将其连接到将更新进度条的插槽中。

一个简单的例子:

class UI(QWidget):
    def __init__(self):
        super().__init__()
        self.progressBar = QProgressBar(self)
        self.progressBar.setMinimum(0)
        self.progressBar.setValue(0)

        layout = QHBoxLayout(self)
        layout.addWidget(self.progressBar)

    def prepare(self, count): # Set the maximum to the number of files to download
        print("Count: ", count)
        self.progressBar.setMaximum(count)

    def progress(self): # Called each time a file has been downloaded
        print(self.progressBar.value())
        self.progressBar.setValue(self.progressBar.value() + 1)


class DownLoader(QObject):

    startDownload = pyqtSignal(int)
    downloaded = pyqtSignal()

    def __init__(self):
        super().__init__()

        self.timer = QTimer(self) # Simulates the download (3 seconds)
        self.timer.setInterval(3000)
        self.timer.timeout.connect(self.downloaded)

    def start(self):
        self.startDownload.emit(5) # We have 5 files to download
        self.timer.start()




if __name__ == "__main__":
    #import sys
    app = QtWidgets.QApplication(sys.argv)

    ui = UI()
    ui.show()

    downloader = DownLoader()

    downloader.startDownload.connect(ui.prepare)
    downloader.downloaded.connect(ui.progress)

    downloader.start()

    app.exec_()

在此示例中,Downloader只是一个存根,它使用计时器模拟下载。替换为实际的下载器。

© www.soinside.com 2019 - 2024. All rights reserved.