ファイルが読み込まれてもプログレスバーが進行しているにもかかわらず、設定された状態で更新されません。プログレスバーの更新を担当する変数に、別の変数ではなく明示的な値を与える必要があるようです。以下のコード、具体的には私のloadfile
の機能を見てください。pyqtのプログレスバーがファイルを読み取るために正しく更新されない
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を返します。
もう1つの問題は、動作し、プログレスバーが更新されているときに、UI全体がフリーズすることです。それはすべてのUIスレッドを使用しているようなもので、私はそれを回避する方法を知らない。私はアプリを閉じたり何かをすることはできません。 x
、Python2では
x = 100/self.line_count()
:
、これは多くの – answerSeeker
は、プログレスバーはOKですが、それはこのように動作しながら、GUIがまだロックされている事を明らかにしています。 @ TatakaiWasumi。 – answerSeeker
それは私のためにうまくいくので、それは奇妙です。プログレスバーが更新されている場合、GUIはブロックされません。 @ TatakaiWasumi – ekhumoro