为初学者简单解释PyQt进度条的方法
A simplistic way to explain PyQt progress bar for beginners
我正在尝试制作一个进度条来处理我在 pyqt 中非常简单的测试应用程序,但不幸的是,我不知道如何实现一些 examples 我在他们检查我时看到的头所以请忍受我的新手问题。
假设我有一个非常简单的 QMainWindow
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(750, 450, 400, 200)
self.setFixedSize(self.size())
btn1 = QtGui.QPushButton("Convert", self)
btn1.move(210,171)
btn1.clicked.connect(self.output_convert)
def output_convert(self):
#very long process to convert a txt file to excel
#Here is where I would like to implement a progress bar
def run():
app = QtGui.QApplication(sys.argv)
GUI = Window()
app.exec_()
run()
如何在 output_convert
中至少实现一个脉冲进度条?
真正让我困惑的是我如何 call/execute example 中的代码。我可以在没有子类化的情况下纯粹在函数中做到吗?它取决于 output_convert
代码吗? TLDR:如何在执行很长的代码时实现进度条(新手友好)?
更新 1
一整天后我让它部分工作这是我的代码
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(750, 450, 400, 200)
self.setFixedSize(self.size())
btn1 = QtGui.QPushButton("Convert", self)
btn1.move(210,171)
btn1.clicked.connect(self.progbar)
def progbar (self):
self.prog_win = QDialog()
self.prog_win.resize(400, 100)
self.prog_win.setFixedSize(self.prog_win.size())
self.prog_win.setWindowTitle("Processing request")
self.lbl = QLabel(self.prog_win)
self.lbl.setText("Please Wait. . .")
self.lbl.move(15,18)
self.progressBar = QtGui.QProgressBar(self.prog_win)
self.progressBar.resize(410, 25)
self.progressBar.move(15, 40)
self.progressBar.setRange(0,1)
self.myLongTask = TaskThread()
#I think this is where I am wrong
self.prog_win.show()
self.myLongTask.taskFinished.connect(self.onStart)
self.output_settings()
def onStart(self):
self.progressBar.setRange(0,0)
self.myLongTask.start()
def output_convert(self):
#very long process to convert a txt file to excel
class TaskThread(QtCore.QThread):
taskFinished = QtCore.pyqtSignal()
def run(self):
time.sleep(3)
self.taskFinished.emit()
def run():
app = QtGui.QApplication(sys.argv)
GUI = Window()
app.exec_()
run()
我现在可以看到我缺少什么,我真正需要的是什么。我四处阅读,每个人都说它需要多线程,子类化是个坏主意。它部分工作,因为进度条在处理时挂起。
self.progressBar = QtWidgets.QProgressBar(self.centralWidget)
self.progressBar.setGeometry(QtCore.QRect(150, 140, 481, 37))
self.progressBar.setStyleSheet("your values")
self.progressBar.setProperty("value", 70)
self.progressBar.setObjectName("progressBar")
这是我用过的进度条的代码,
第一行定义了 QtWidget 的类型,在我们的例子中是进度条,它接受参数,central widget,这表明这将是中央 widget 的一部分,
set geometry 是 positioning 和 size。
设置样式表是您指定颜色和内容的地方。
set属性函数是用来设置进度条的值或者填充的,这个就是你要改变的。
Most 时间此小部件 os 依赖。也就是说,如果您使用 windows,默认情况下您将获得 windows 脉冲进度条。但在其他操作系统中,例如 linux,您必须使用 setstyle() 函数设置小部件的默认样式。
我正在尝试制作一个进度条来处理我在 pyqt 中非常简单的测试应用程序,但不幸的是,我不知道如何实现一些 examples 我在他们检查我时看到的头所以请忍受我的新手问题。
假设我有一个非常简单的 QMainWindow
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(750, 450, 400, 200)
self.setFixedSize(self.size())
btn1 = QtGui.QPushButton("Convert", self)
btn1.move(210,171)
btn1.clicked.connect(self.output_convert)
def output_convert(self):
#very long process to convert a txt file to excel
#Here is where I would like to implement a progress bar
def run():
app = QtGui.QApplication(sys.argv)
GUI = Window()
app.exec_()
run()
如何在 output_convert
中至少实现一个脉冲进度条?
真正让我困惑的是我如何 call/execute example 中的代码。我可以在没有子类化的情况下纯粹在函数中做到吗?它取决于 output_convert
代码吗? TLDR:如何在执行很长的代码时实现进度条(新手友好)?
更新 1 一整天后我让它部分工作这是我的代码
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(750, 450, 400, 200)
self.setFixedSize(self.size())
btn1 = QtGui.QPushButton("Convert", self)
btn1.move(210,171)
btn1.clicked.connect(self.progbar)
def progbar (self):
self.prog_win = QDialog()
self.prog_win.resize(400, 100)
self.prog_win.setFixedSize(self.prog_win.size())
self.prog_win.setWindowTitle("Processing request")
self.lbl = QLabel(self.prog_win)
self.lbl.setText("Please Wait. . .")
self.lbl.move(15,18)
self.progressBar = QtGui.QProgressBar(self.prog_win)
self.progressBar.resize(410, 25)
self.progressBar.move(15, 40)
self.progressBar.setRange(0,1)
self.myLongTask = TaskThread()
#I think this is where I am wrong
self.prog_win.show()
self.myLongTask.taskFinished.connect(self.onStart)
self.output_settings()
def onStart(self):
self.progressBar.setRange(0,0)
self.myLongTask.start()
def output_convert(self):
#very long process to convert a txt file to excel
class TaskThread(QtCore.QThread):
taskFinished = QtCore.pyqtSignal()
def run(self):
time.sleep(3)
self.taskFinished.emit()
def run():
app = QtGui.QApplication(sys.argv)
GUI = Window()
app.exec_()
run()
我现在可以看到我缺少什么,我真正需要的是什么
self.progressBar = QtWidgets.QProgressBar(self.centralWidget)
self.progressBar.setGeometry(QtCore.QRect(150, 140, 481, 37))
self.progressBar.setStyleSheet("your values")
self.progressBar.setProperty("value", 70)
self.progressBar.setObjectName("progressBar")
这是我用过的进度条的代码, 第一行定义了 QtWidget 的类型,在我们的例子中是进度条,它接受参数,central widget,这表明这将是中央 widget 的一部分, set geometry 是 positioning 和 size。 设置样式表是您指定颜色和内容的地方。 set属性函数是用来设置进度条的值或者填充的,这个就是你要改变的。
Most 时间此小部件 os 依赖。也就是说,如果您使用 windows,默认情况下您将获得 windows 脉冲进度条。但在其他操作系统中,例如 linux,您必须使用 setstyle() 函数设置小部件的默认样式。