python进度条 pyqt_pyqt中的进度条没有正确更新以读取fi

在PyQt应用程序中,一个进度条在读取文件时应按比例更新,但实际未按预期工作。问题在于`loading += x`,其中`x`是根据文件行数计算的比例。将`x`直接赋值为固定值(如0.245700246)可以使进度条正常更新。然而,这导致UI冻结,因为读取文件的操作阻塞了UI线程。需要找到一种方式在后台线程中执行文件读取,以保持UI的响应性。
摘要由CSDN通过智能技术生成

我在一个应用程序中有一个进度条,它应该在文件被读取时继续运行,但它根本没有按照我设置的条件进行更新。似乎我需要给负责更新进度条的变量一个显式的值,而不是另一个变量。请看下面的代码,特别是我的loadfile函数。在import sys

from PyQt4 import QtCore, QtGui

import subprocess

from time import sleep

class AppView(QtGui.QDialog):

def __init__(self, parent=None):

super(AppView, self).__init__(parent)

self.resize(400, 400)

self.buttonStart = QtGui.QPushButton(self)

self.buttonStart.setText("Start")

self.buttonStart.clicked.connect(self.start)

self.progress = QtGui.QProgressBar(self)

self.progress.setGeometry(200, 80, 250, 20)

verticalLayout = QtGui.QVBoxLayout(self)

verticalLayout.addWidget(self.buttonStart)

verticalLayout.addWidget(self.progress)

def line_count(self):

p = subprocess.Popen(['wc', '-l', 'xfile'], stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

result, err = p.communicate()

if p.returncode != 0:

raise IOError(err)

return int(result.strip().split()[0]) #returns 407 lines

def start(self):

self.loadfile()

def loadfile(self):

x = 100/self.line_count()

loading = 0

file_in = "xfile"

with open(file_in) as f:

for line in f:

#sleep(0.1)

print line

loading += x

#loading += 0.245700246

self.progress.setValue(loading)

if __name__ == '__main__':

app = QtGui.QApplication(sys.argv)

appview = AppView()

appview.show()

sys.exit(app.exec_())

但是,如果我像这样设置加载loading += 0.245700246,它就可以工作了。我不明白为什么loading += x不执行同样的操作,因为它也返回0.245700246。在

另一个问题是,当它正常工作并且进度条正在更新时,整个UI被冻结。就像它使用了所有的ui线程,但我还不知道如何绕过它。我无法关闭应用程序或执行任何其他操作。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值