python - pyqt4中时间未知过程中的进度条
问题描述
我是 pyQt4 的新手,我需要使用 pyQt4 和 python 3.5 创建 GUI。我有很长的过程,没有确切的执行时间。持续时间根据我每次在流程中使用的输入而变化。有一些关于使用计时器添加进度条的示例。但就我而言,我不知道确切的持续时间。
我需要根据进程花费的时间完成一个进度条。在我的代码中,这个过程是methodtobeexecute()。有人可以通过带有解释的代码示例帮助我解决此问题。提前致谢....
这是我的代码,到目前为止,它使用 QTimer 完成了进度条。但我想要的是完成进度条,同时 methodtobeexecute() 方法完成它的任务。(QTimer 仅用于检查进度条)
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'pro2.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
import sys
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.progressBar = QtGui.QProgressBar(Form)
self.progressBar.setGeometry(QtCore.QRect(160, 60, 118, 23))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName(_fromUtf8("progressBar"))
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(170, 140, 75, 23))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
# # restarts the 'QProgressBar'
self.progressBar.reset()
# creates a 'QTimer'
self.qtimer = QtCore.QTimer()
# connects the 'QTimer.timeout()' signal with the 'qtimer_timeout()' slot
self.qtimer.timeout.connect(self.qtimer_timeout)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(_translate("Form", "Form", None))
self.pushButton.setText(_translate("Form", "start", None))
self.pushButton.clicked.connect(self.qpushbutton_clicked)
def qpushbutton_clicked(self):
self.progressBar.reset()
#this is the method that needs the time to complete the progress bar
self.methodtobeexecute()
self.qtimer.start(40)
def qprogressbar_value_changed(self, value):
if value == self.progressBar.maximum():
# stops the 'QTimer'
self.qtimer.stop()
def qtimer_timeout(self):
# gets the current value of the 'QProgressBar'
value = self.progressBar.value()
# adds 1 to the current value of the 'QProgressBar'
self.progressBar.setValue(value + 1)
def methodtobeexecute(self):
for i in 400:
print(i)
def main():
app = QtGui.QApplication(sys.argv)
mw = Ui_Form()
mw.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
解决方案
推荐阅读
- ios - self.presentingViewController 不是应该的那个?
- javascript - 数据未推入数组nodejs
- c# - 在 Docker 容器中访问 .NET Core 项目中的 CSV 文件
- c# - 从数据库 c# asp.net mvc core 更改现有应用程序
- javascript - 这个非常简单的javascript代码怎么会崩溃
- ibm-cloud-infrastructure - 从 softlayer slcli 创建专用 vsi 时出错
- php - Laravel 如何处理重复的待办事项?
- sql - 将一张表中的数据合并到第二张表中
- python - 为数组赋值(Python,Numpy)
- javascript - 如何能够禁用 ar js 对象