Python 3.x 使用进度条的PyQt似乎不是渐进式的
以下代码用于在读取24行文件时更新进度条。用来演示较长时间内发生的事情的计时器 实际情况是,逐行读取整个文件,然后在最后一次更新进度条 我认为这是一个关于文件对话框被打开或线程化的焦点问题Python 3.x 使用进度条的PyQt似乎不是渐进式的,python-3.x,progress-bar,qmainwindow,Python 3.x,Progress Bar,Qmainwindow,以下代码用于在读取24行文件时更新进度条。用来演示较长时间内发生的事情的计时器 实际情况是,逐行读取整个文件,然后在最后一次更新进度条 我认为这是一个关于文件对话框被打开或线程化的焦点问题 for x in range(0, i): print ("We're on line",x) line=f.readline() time.sleep(0.3) self.ui.textEdit.append(line)
for x in range(0, i):
print ("We're on line",x)
line=f.readline()
time.sleep(0.3)
self.ui.textEdit.append(line)
self.ui.progressBar.setProperty("value", i*4)
f.close()
“文件”对话框(有效)为
下面是完整的代码和打印调试程序
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# Set up the user interface
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.textEdit.setAlignment(QtCore.Qt.AlignLeft)
self.ui.btn_load_data.clicked.connect(self.browse_for_file)
self.show()
def browse_for_file(self):
file_name = QFileDialog.getOpenFileName(self, "select file")
i = 0
print(file_name)
self.ui.textEdit.append("Just going in")
with open(file_name[0]) as file:
for line in file:
i += 1
f = open(file_name[0], "r")
print("lines in file is ",i)
for x in range(0, i):
print ("We're on line",x)
line=f.readline()
time.sleep(0.3)
self.ui.textEdit.append(line)
self.ui.progressBar.setProperty("value", i*4)
f.close()
app = QApplication(sys.argv)
window = MainWindow()
app.exec_()
出现此问题的原因是用户界面绘制在事件循环内,而代码没有返回到事件循环。在某些函数运行时处理事件的一种方法是使用
QApplication.processEvents()
,如:
for x in range(0, i):
print ("We're on line",x)
line=f.readline()
time.sleep(0.3)
self.ui.textEdit.append(line)
self.ui.progressBar.setProperty("value", i*4)
QApplication.processEvents()
f.close()
这将允许处理事件,包括绘制用户界面
for x in range(0, i):
print ("We're on line",x)
line=f.readline()
time.sleep(0.3)
self.ui.textEdit.append(line)
self.ui.progressBar.setProperty("value", i*4)
QApplication.processEvents()
f.close()