在函数为 运行 Pyside2 时显示进度条

Show progressBar while function is running Pyside2

我正在开发 Pyside2,python 3.8,windows 10

我有一个应用程序可以解析文件并在 QtableView 中显示数据。我要实现的是一个只有一个按钮的对话框 Window,这个对话框的唯一目的 window 是给用户一个简约和简单的视图,他可以首先 select 要解析的文件,并在运行 LoadData() 函数时显示加载进度条。解析完成后,主页对话框应该只有 hidden/closed。

这是我到目前为止尝试过的方法:

class MainWindow(QtWidgets.QMainWindow,  Ui_MainWindow):
    def __init__(self, file_name,parent=None):
        """
        ..
        __init__ code lines
        """
        self.change_val = QtCore.Signal(int)
        self.change_val[int].connect(self.set_progress_val)
        self.progress = QtWidgets.QProgressDialog('loading...', 'cancel', 0, 100, self)
        self.progress.show()
        self.LoadData(d.path)
    
    @QtCore.Slot(int)
    def set_progress_val(self, val):
        self.progress.setValue(val)

    def LoadData(self, file_path):
        
        """
        Parsing lines of code
        ..
        self.change_val.emit(30)
        ..
        ..
        self.change_val.emit(60)
        ..
        ..
        """
        self.progress.hide()
        #Parsing finished -> show the mainWindow
        self.show()

class HomeDialog(QtWidgets.QDialog, home_dialog.Ui_Dialog):
    def __init__(self, parent=None):
        super(HomeDialog, self).__init__(parent)
        self.setupUi(self)
        self.openB6.clicked.connect(self.get_file_name)

    def get_file_name(self):
        file_name = QtWidgets.QFileDialog.getOpenFileName(self, 'Open config file',
                                                            dir=path.join("/"),
                                                            filter="B6 (*.b6)")
        if not file_name[0]:
            return None
        else:
            self.path = file_name
            self.accept()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle(ProxyStyle())
    d = HomeDialog()
    if d.exec_():
        mainWin = MainWindow(file_name=d.path)
        mainWin.show()
        sys.exit(app.exec_())

我在 self.change_val[int].connect(self.set_progress_val) 行收到以下错误:

'str' object has no attribute 'connect'

信号不是在 class 构造函数或方法中声明的,而是在静态部分声明的:

class MainWindow(QtWidgets.QMainWindow,  Ui_MainWindow):
    <b>change_val = QtCore.Signal(int)</b>

    def __init__(self, file_name,parent=None):
        """
        ..
        __init__ code lines
        """
        self.change_val[int].connect(self.set_progress_val)
        self.progress = QtWidgets.QProgressDialog('loading...', 'cancel', 0, 100, self)
        self.progress.show()
        self.LoadData(d.path)