多线程情况下tkinter的进度条该怎么判断进度完成?

最近在尝试写一个tkinter的界面开发,点击提交后开始解析数据是否在数据库,进行数据运算以及可视化等。最后把结果显示出来。

提交界面没什么问题,解析界面我放了一个进度条,因为解析的程序有些复杂,所以会导致窗口卡住,我搜了一下可以通过多线程解决。但是我把解析过程放在多线程后该怎么告诉界面已经解析完了,可以跳转到下一个界面了呢?

本来我想着解析完之后直接跳转页面,但是这样会导致窗口跑到线程里去了,不在主线程了

而且之后的界面本来是正常的,但是第二次提交后也会出问题

后来我想着可以写一个while循环等一个信号切换页面,但这个while循环又会导致界面卡死,我实在找不到什么办法了,求大佬们帮帮忙。

下面是创建线程和解析界面的代码

def thread_it(func,*args):
	# 将函数打包入线程
	t = threading.Thread(target=func,args=args) # 创建
	t.setDaemon(True) # 守护
	t.start() # 启动

class parse():		
	'''解析页面'''
	def __init__(self,master,uid):
		self.uid = uid
		self.master = master
		self.parse = tk.Frame(self.master)
		self.parse.pack()
		self.label = tk.Label(self.parse,text='解析中',font=("Helvetica",20))
		self.label.grid(row=1,column=1,pady=10)
		self.pl = ttk.Progressbar(self.parse,length=200,mode='indeterminate',maximum=200,orient=tk.HORIZONTAL)
		self.pl.grid(row=2,column=1,pady=10)
		self.label_1 = tk.Label(self.parse,text='正在获取数据')
		self.label_2 = tk.Label(self.parse,text='正在分析数据')
		self.label_3 = tk.Label(self.parse,text='正在可视化')
		self.running = True
		self.success = False
		self.parse_start()

	def parse_start(self):
		uid = self.uid
		self.pl.start()
		t1 = thread_it(self.parse_uid,uid) # 通过线程开始解析,防止界面卡顿
		
		

	def parse_uid(self,uid):
		self.label_1.grid(row=3,column=1,pady=10)
		# 第一步,解析uid的信息是否在原始数据库,如果不在则导入
		if get_uid_message(uid):
			self.label_1.destroy()
			self.label_2.grid(row=3,column=1,pady=10)
			# 第二步,分析uid所属账号类型
			# if parse_uid_type(uid):
			if True:
				self.label_2.destroy()
				self.label_3.grid(row=3,column=1,pady=10)
				# 第三步,对该用户进行可视化
				if plot(uid):
					self.label_3.destroy()
					self.success = True
		if self.success:
			self.parse.destroy()
			messagebox.showinfo(title='解析结果',message='解析成功')
			facel(self.master,self.uid)
			
		else:
			self.parse.destroy()
			messagebox.showinfo(title='解析结果',message='解析失败,请稍后重试')
			initface(self.master)

 

你可以监听每个线程是否完成,做一个近似判断。

我有一个新想法,每次可视化界面展示完点击返回原窗口的时候把原窗口毁掉,新建一个新窗口,那么第二次提交后的图片就正常出现了。

然后又有了一个新问题,这样的话用户一直提交,就会一直开新的线程,那么迟早会把内存吃完,所以只能说表面上没什么问题了,根本的问题还是没解决

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632