以下代码用于在读取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)
self.ui.progressBar.setProperty("value", i*4)
f.close()
文件对话框(有效)
file_name = QFileDialog.getOpenFileName(self, "select file")
完整的代码如下所示,打印调试乱七八糟
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_()
答案 0 :(得分:1)
问题发生的原因是在事件循环中绘制了用户界面,并且您的代码没有返回到事件循环。在某个函数运行时处理事件的一种方法是使用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()
这将允许处理事件,包括绘制用户界面。