PyQt5如何实现实时更新的进度条?

刚在云主机上搭建好ftp服务,通过输入网站的url地址无法访问网站,但是可以在浏览器中输入云主机的公网ip,再通过ftp服务的用户名密码验证可访问此网站。对于网络实在不懂,求大神指教。

用户9843436
提问于 5 年前
2个回答
  • 回答于 3 年前

    分享一个更简单的方法:

    循环里面加一段

    QApplication.processEvents()

    每执行一次循环,刷新一次界面

  • 回答于 3 年前

    这种要用子线程来做

    把循环放到子线程里面,在子线程里面发送进度条更新信号给主线程,主线程只负责更新进度条,这样就不会卡住了

    可以这么写

    import sys
    import time
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    
    
    class test(QWidget):
    
        def __init__(self):
            super(test, self).__init__()
    
        def setupUi(self):
            self.setFixedSize(500, 90)
            self.main_widget = QtWidgets.QWidget(self)
            self.progressBar = QtWidgets.QProgressBar(self.main_widget)
            self.progressBar.setGeometry(QtCore.QRect(20, 20, 450, 50))
            # 创建并启用子线程
            self.thread_1 = Worker()
            self.thread_1.progressBarValue.connect(self.copy_file)
            self.thread_1.start()
    
        def copy_file(self, i):
            self.progressBar.setValue(i)
    
    
    class Worker(QThread):
    
        progressBarValue = pyqtSignal(int)  # 更新进度条
    
        def __init__(self):
            super(Worker, self).__init__()
    
    
        def run(self):
            for i in range(101):
                time.sleep(0.1)
                self.progressBarValue.emit(i)  # 发送进度条的值 信号
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        testIns = test()
        testIns.setupUi()
        testIns.show()
        sys.exit(app.exec_())