我想创建一个进度条,显示(如忙),直到按钮的代码结束。我的目标是在按下按钮(连接到函数)时显示进度条,在代码运行时保持可见,并在连接到按钮的函数时隐藏它结束。这个任务部分完成,但我的进度栏setVisible(True)等待代码结束,它们显示。 我的代码在这里:
from ui import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets, QtPrintSupport
from PyQt5.QtWidgets import QDialog,QWidget,QApplication, QInputDialog, QLineEdit, QFileDialog
from PyQt5.QtGui import QIcon
class ProgressThread(QtCore.QThread):
job_done = QtCore.pyqtSignal('QString')
def __init__(self, parent=None):
super(ProgressThread, self).__init__(parent)
self.gui_bar = None
def do_work(self):
self.job_done.emit(self.gui_bar)
def run(self):
self.do_work()
class mainProgram(QtWidgets.QMainWindow, Ui_MainWindow): #main window
def __init__(self, parent=None):
super(mainProgram, self).__init__(parent)
self.setupUi(self)
self.progress_thread = ProgressThread()
self.progress_thread.job_done.connect(self.on_job_start)
self.create_ui()
self.B_aerodrome_data.clicked.connect(self.start_thread)
self.B_aerodrome_data.clicked.connect(self.aerodrome_data)
def aerodrome_data(self): #def i want with start show progress bar
#here show progressBar(self.progress.setVisible(True) and update gui)
#do many staffs of code here that takes time
#here hide progress bar and update gui
def start_thread(self):
self.progress_thread.gui_bar = self.progress.setVisible(False)
self.progress_thread.start()
def on_job_done(self):
print("Generated string : ")
self.progress.setVisible(False)
def on_job_start(self):
print("aaaaaaaaaa")
self.progress.setRange(0,0)
self.progress.setVisible(True)
def create_ui(self):
self.progress = QtWidgets.QProgressBar(self)
self.progress.setVisible(False)
self.progress.setGeometry(200, 205, 250, 20)
self.progress.setRange(0, 0)
self.progress.setObjectName("progress")
#self.button.clicked.connect(self.start_thread)
layout = QtWidgets.QVBoxLayout(self)
#layout.addWidget(self.button)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
nextGui = mainProgram()
nextGui.showMaximized()
sys.exit(app.exec_())
Ui\u Main窗口在这里:
^{pr2}$
在您的例子中,我看到您创建了不必要的函数,我删除了一些。根据你告诉我的,信号不需要携带信息,所以我将创建一个没有参数的信号。连接到按钮的插槽必须使
QProgressBar
可见并启动线程,并且完成的信号作业必须与隐藏QProgressBar
的方法连接,在下面的示例中使用QThread::sleep()
来模拟某些处理。在试试这个代码,你会从这里找到你的解决方案。 当你按下按钮时,线程将启动并从0-100向进度条发送int数据
相关问题 更多 >
编程相关推荐