Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用进度条的PyQt似乎不是渐进式的_Python 3.x_Progress Bar_Qmainwindow - Fatal编程技术网

Python 3.x 使用进度条的PyQt似乎不是渐进式的

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)

以下代码用于在读取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()
“文件”对话框(有效)为

下面是完整的代码和打印调试程序

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()