【问题标题】:pyQT QNetworkManager and ProgressBarspyQT QNetworkManager 和 ProgressBars
【发布时间】:2010-10-20 03:56:06
【问题描述】:

我正在尝试编写从网络服务器下载文件并保存它的代码,在 QProgressBar 中显示下载进度。 现在,有一些方法可以在常规 Python 中做到这一点,而且很容易。问题是它锁定了进度条的刷新。解决方案是使用 PyQT 的 QNetworkManager 类。我可以用它下载东西,我只是无法设置以在进度条上显示进度。这是一个例子:

class Form(QDialog):

    def __init__(self,parent=None):
        super(Form,self).__init__(parent)
        self.progressBar = QProgressBar()
        self.reply = None
        layout = QHBoxLayout()
        layout.addWidget(self.progressBar)
        self.setLayout(layout)
        self.manager = QNetworkAccessManager(self)
        self.connect(self.manager,SIGNAL("finished(QNetworkReply*)"),self.replyFinished)
        self.Down()

    def Down(self):

        address = QUrl("http://stackoverflow.com") #URL from the remote file.
        self.manager.get(QNetworkRequest(address))
    def replyFinished(self, reply):
        self.connect(reply,SIGNAL("downloadProgress(int,int)"),self.progressBar, SLOT("setValue(int)"))
        self.reply = reply
        self.progressBar.setMaximum(reply.size())
        alltext = self.reply.readAll()
        #print alltext
        #print alltext
    def updateBar(self, read,total):
        print "read", read
        print "total",total
        #self.progressBar.setMinimum(0)
        #self.progressBar.setMask(total)
        #self.progressBar.setValue(read)

在这种情况下,我的方法“updateBar”永远不会被调用......有什么想法吗?

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    您还没有将任何信号连接到您的 updateBar() 方法。

    改变

    def replyFinished(self, reply):
            self.connect(reply,SIGNAL("downloadProgress(int,int)"),self.progressBar, SLOT("setValue(int)"))
    

    def replyFinished(self, reply):
            self.connect(reply,SIGNAL("downloadProgress(int,int)"),self.updateBar)
    

    请注意,在 Python 中,您不必显式使用 SLOT() 语法;您可以将引用传递给您的方法或函数。

    更新:

    我只是想指出,如果您想在处理期间 GUI 锁定的任何情况下使用进度条,一种解决方案是在另一个线程中运行您的处理代码,以便您的 GUI 接收重绘事件。考虑阅读 QThread 类,以防您遇到没有为您提供预构建解决方案的进度条的其他原因。

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多