【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实际的操作为:

    def start_check():      
        update_root()
        text3.delete("1.0", "end")
        text3.mark_set('here',1.0)
        text3.insert('here', "开始检索文件并处理,用时较长请勿退出,请在检查结束后点击 打开结果\n")
        fullpath = text1.get(1.0, "end").strip()
        full_docx = get_process_files(fullpath)
        proc_file(full_docx)
        log_info_get()
        gen_excel(mode)
        text3.mark_set('here',1.0)
        text3.insert('here', "EXCEL已生成:" + excel_name + "\n")
        text3.mark_set('here',1.0)
        text3.insert('here', "==========================================================================\n")
    pass

 


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

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


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


相关文章
|
9天前
|
前端开发 Python
python之【Tkinter模块】
python之【Tkinter模块】
19 5
|
8天前
|
Python
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
5-5|python开启多线程入口必须在main,从python线程(而不是main线程)启动pyQt线程有什么坏处?...
|
11天前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
|
27天前
|
API Python
探索Python中的多线程编程
探索Python中的多线程编程
39 5
|
6天前
|
数据采集 Linux 调度
Python之多线程与多进程
Python之多线程与多进程
12 0
|
6天前
|
并行计算 关系型数据库 MySQL
30天拿下Python之使用多线程
30天拿下Python之使用多线程
17 0
|
10天前
|
存储 算法 Java
关于python3的一些理解(装饰器、垃圾回收、进程线程协程、全局解释器锁等)
该文章深入探讨了Python3中的多个重要概念,包括装饰器的工作原理、垃圾回收机制、进程与线程的区别及全局解释器锁(GIL)的影响等,并提供了详细的解释与示例代码。
15 0
|
10天前
|
安全 Java 调度
python3多线程实战(python3经典编程案例)
该文章提供了Python3中多线程的应用实例,展示了如何利用Python的threading模块来创建和管理线程,以实现并发执行任务。
12 0
|
14天前
|
并行计算 API 调度
探索Python中的并发编程:线程与进程的对比分析
【9月更文挑战第21天】本文深入探讨了Python中并发编程的核心概念,通过直观的代码示例和清晰的逻辑推理,引导读者理解线程与进程在解决并发问题时的不同应用场景。我们将从基础理论出发,逐步过渡到实际案例分析,旨在揭示Python并发模型的内在机制,并比较它们在执行效率、资源占用和适用场景方面的差异。文章不仅适合初学者构建并发编程的基础认识,同时也为有经验的开发者提供深度思考的视角。
|
3月前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
59 3
下一篇
无影云桌面