【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持续打印在显示框中。


相关文章
|
8月前
|
数据采集 存储 JSON
Python爬取知乎评论:多线程与异步爬虫的性能优化
Python爬取知乎评论:多线程与异步爬虫的性能优化
|
8月前
|
人工智能 安全 调度
Python并发编程之线程同步详解
并发编程在Python中至关重要,线程同步确保多线程程序正确运行。本文详解线程同步机制,包括互斥锁、信号量、事件、条件变量和队列,探讨全局解释器锁(GIL)的影响及解决线程同步问题的最佳实践,如避免全局变量、使用线程安全数据结构、精细化锁的使用等。通过示例代码帮助开发者理解并提升多线程程序的性能与可靠性。
273 0
|
5月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
540 0
|
7月前
|
数据采集 消息中间件 并行计算
Python多线程与多进程性能对比:从原理到实战的深度解析
在Python编程中,多线程与多进程是提升并发性能的关键手段。本文通过实验数据、代码示例和通俗比喻,深入解析两者在不同任务类型下的性能表现,帮助开发者科学选择并发策略,优化程序效率。
592 1
|
9月前
|
JSON 算法 Java
打造终端里的下载利器:Python实现可恢复式多线程下载器
在数字时代,大文件下载已成为日常需求。本文教你用Python打造专业级下载器,支持断点续传、多线程加速、速度限制等功能,显著提升终端下载体验。内容涵盖智能续传、多线程分块下载、限速控制及Rich库构建现代终端界面,助你从零构建高效下载工具。
595 1
|
8月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
8月前
|
数据采集 存储 Java
多线程Python爬虫:加速大规模学术文献采集
多线程Python爬虫:加速大规模学术文献采集
|
9月前
|
数据采集 网络协议 前端开发
Python多线程爬虫模板:从原理到实战的完整指南
多线程爬虫通过并发请求大幅提升数据采集效率,适用于大规模网页抓取。本文详解其原理与实现,涵盖任务队列、线程池、会话保持、异常处理、反爬对抗等核心技术,并提供可扩展的Python模板代码,助力高效稳定的数据采集实践。
466 0
|
6月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
861 102
|
6月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
418 104

推荐镜像

更多