启动Kivy应用程序中的线程后,按顺序更新标签时出现问题。标签可以很好地更新,但是显然,它们将在不同的时间更新,具体取决于它们各自线程的完成时间。我想让它们从上到下(从头到尾)更新,而下一个线程等待当前线程完成运行。在此过程中,用户应能够单击我的应用程序中的其他小部件。预先谢谢你!
我尝试使用Clock类,其间隔为1,但这会冻结我的应用程序。我现在正在尝试创建线程,并为每个等于1的线程设置每个守护程序,以便在此过程中单击其他按钮。不幸的是,我现在所拥有的,不包括等待当前完成的下一个线程。
def startDeployment(self, event):
# disable button
self.StartButton.disabled = True
# change button text to 'Running'
self.StartButton.text = 'Running'
# disable pause button
self.PauseButton.disabled = False
# enable the stop button
self.StopButton.disabled = False
# start deployment
threads = []
for task in self.tasks:
statusLabel = self.statusLabels[self.tasks.index(task)]
task = task.rstrip()
task = task.split(";")
taskOp = task[1]
taskArg = task[2]
thread = threading.Thread(target=self.executeTask, args=(taskOp, taskArg, statusLabel))
threads.append(thread)
threading.Thread(target=self.threadControl, args=(threads,)).start()
def executeTask(self, taskOperation, taskArgument, statusLabel):
proc = subprocess.Popen(
[taskOperation,taskArgument],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
stdout, stderr = proc.communicate()
global output
global error
output = stdout.decode()
error = stderr.decode()
for child in self.statusLayout.children:
if child == statusLabel:
Clock.schedule_once(partial(self.updateStatusLabel,child), 0.25)
return(None)
def threadControl(self, threads):
for thread in threads:
thread.daemon = True
thread.start()
thread.join()
return(None)
def updateStatusLabel(self, statusLabel, dt):
statusLabel.text = 'Done'
return(None)
我希望我的滚动视图中的标签能够依次/按时间顺序从上到下依次更新。而是根据线程完成情况进行更新。当然,这种情况我只是不知道如何强制每个线程等待先前执行的线程完成。