PyQt 使用进度条好像不是progressive
PyQt Using a progress bar seems to not be progressive
以下代码用于在读取 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_()
出现问题是因为用户界面是在事件循环内绘制的,而您的代码没有返回到事件循环。在某些函数为 运行 时处理事件的一种方法是使用 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()
这将使事件得到处理,包括用户界面的绘制。
以下代码用于在读取 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_()
出现问题是因为用户界面是在事件循环内绘制的,而您的代码没有返回到事件循环。在某些函数为 运行 时处理事件的一种方法是使用 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()
这将使事件得到处理,包括用户界面的绘制。