【python】通过多线程解决tkinter gui中按键卡住的问题

简介: 【python】通过多线程解决tkinter gui中按键卡住的问题

前言

前几天在C站上上看到了类似的博客,回想起了我之前解决这个问题的历程,作为一个自学者&外行,碰到这种问题其实还是挺头疼的。

问题复现

就以之前做的“用起来不一般的word批注整理器”为例(博客路径:【python脚本】word批注批量提取器V2实用版,资源路径:get_word_comments: 用于获取和整理word批注状态的软件,基于python与VBA编码),通过tk搭起来的界面是这样的:

那么在选择目录后,点击“开始检查”,会发生哪些事情呢?

  1. 递归遍历目录,找出全部的docx文件;
  2. 选择一个word,后台打开,执行预定好的vba宏代码;
  3. 选择下一个word打开,直到把所有的word全部执行一遍,得到一众commets.txt;
  4. python处理所有的commets.txt,收集整理批注;
  5. 将整理后的信息根据配置写入excel文档;

采用简单的方法组织的话,所有这些操作完成后“开始检查”按键对应的函数才执行结束,这个按键才会弹起来:

button2 = Button(f3, text='开始检查', command=thread_start_check)

而如果文档比较多,处理比较慢时程序就会呈现出卡死的状态,稍有不慎可能就把程序搞死了,所以为了软件的实用性,卡死的问题是必须要解决的。

多线程

作为一个曾经的优秀的验证工程师,对于多线程的使用还是比较熟练的,所以我就明确了解决问题的思路:

python中的线程库为:

import threading

start_check实际的操作为:

1.     def start_check():      
2.         update_root()
3.         text3.delete("1.0", "end")
4.         text3.mark_set('here',1.0)
5.         text3.insert('here', "开始检索文件并处理,用时较长请勿退出,请在检查结束后点击 打开结果\n")
6.         fullpath = text1.get(1.0, "end").strip()
7.         full_docx = get_process_files(fullpath)
8.         proc_file(full_docx)
9.         log_info_get()
10.         gen_excel(mode)
11.       
12.         text3.mark_set('here',1.0)
13.         text3.insert('here', "EXCEL已生成:" + excel_name + "\n")
14.         text3.mark_set('here',1.0)
15.         text3.insert('here', "==========================================================================\n")
16.     pass

那么借助于threading,可以在实际操作外裹一层函数,构成按键实际关联的函数:

1.     def thread_start_check():
2.         t1 = threading.Thread(target=start_check,args=())
3.         t1.start()
4.     pass

这样操作后,按键就可以直接回弹,而操作还在继续,log持续打印在显示框中。


相关文章
|
Python
【python】通过多线程解决tkinter gui中按键卡住的问题
【python】通过多线程解决tkinter gui中按键卡住的问题
423 0
|
jenkins Java 持续交付
Jenkins安装与配置Windows11系统
Jenkins安装与配置Windows11系统,官网下载LTS(长期稳定版);安装需要一定时间,耐心等待就好了,基本就是一路Next即可;点击【开始使用Jenkins】访问地址:访问地址http://localhost:8080/,打开界面,配置 end ,大功告成!后面搭建部署了自动化脚本再进一步分享系统初始化配置、自动化部署配置相关内容。
513 0
Jenkins安装与配置Windows11系统
|
存储 JavaScript Java
【黑马头条-Java微服务项目】
【黑马头条-Java微服务项目】
626 0
|
算法 Windows
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
在一般能搜到的所有实现圆角窗体的示例中,都有着惨不忍睹的锯齿...而借助于Layered Windows,是可以实现丝滑无锯齿效果的Form窗体的,其具体原理就是分层窗体....
2229 0
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
|
机器学习/深度学习 自然语言处理 算法
大数据与机器学习
大数据与机器学习紧密相关,前者指代海量、多样化且增长迅速的数据集,后者则是使计算机通过数据自动学习并优化的技术。大数据涵盖结构化、半结构化及非结构化的信息,其应用广泛,包括商业智能、金融和医疗保健等领域;而机器学习分为监督学习、无监督学习及强化学习,被应用于图像识别、自然语言处理和推荐系统等方面。二者相结合,能有效提升数据分析的准确性和效率,在智能交通、医疗及金融科技等多个领域创造巨大价值。
566 2
|
数据处理 UED Python
Python 进度条:告别枯燥等待,让你的程序动感十足!
Python 进度条:告别枯燥等待,让你的程序动感十足!
602 1
|
网络协议 应用服务中间件 nginx
Nginx的http块sendfile,keepalive_timeout的配置指令说明
Nginx的http块sendfile,keepalive_timeout的配置指令说明
|
Python
用Python优雅地写出数学表达式的LaTeX代码
用Python优雅地写出数学表达式的LaTeX代码
637 1
用Python优雅地写出数学表达式的LaTeX代码
|
机器学习/深度学习 编解码 人工智能
全球10米土地覆盖产品(ESA)数据集2020和2021年
全球10米土地覆盖产品(ESA)数据集2020和2021年
960 0
|
数据库连接 API Nacos
Nacos在启动时会检查数据库连接,如果连接失败,它会抛出一个异常并退出
Nacos在启动时会检查数据库连接,如果连接失败,它会抛出一个异常并退出
525 7