在函数为 运行 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)
我正在开发 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)