当前位置: 首页 > news >正文

[python]tkinker的GUI应用执行耗时长的任务

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    在Tkinter的GUI应用中,经常会遇到耗时较长的任务。如界面上一个按键开启任务,任务中一些数据需要显示到界面上,用户可以用另一个中止按键停止任务执行。为了避免界面长时间僵住,所以通常开启一个工作线程,在后台执行,这时应涉及到及界面线程的交互。

    Python要求不要在非GUI线程的环境下调用Tkinter的函数和对象,所以在后台线程中使用root.event_generator也是不安全的,可以在一定情况下引起程序crash。

    经过证明可用的方法是:

1、使用一个Queue作为线程间的交互媒介。 queue = Queue.Queue()

2、定义消息类型,如MESSAGE_LOG='log'  MESSAGE_EXIT='exit' MESSAGE_CANCEL='cancel'

3、在工作线程中,将发送的消息放入Queue。

    while running:   

        ...    

        queue.put_nowait([MESSAGE_LOG,"xxxxxxxxxx"])

4、在GUI线程开启一个定时任务。root.after(100, periodic_call)。

5、在periodic_call中,处理所有的queue中已有的消息。

   try:

        while True:

                 [code,item] = queue.get_nowait()

                ...

                 process

                ...

    except Queue.Empty:

        pass

6、如果需要中止线程,则在GUI线程中设置running的值为False。


      


转载于:https://my.oschina.net/u/136074/blog/603248

相关文章:

  • 与走在创业路上的学子交流——记网维“海大快点”创业团队
  • 以一个小例子作为自学XML的成果
  • 第七章 ReentrantLock总结
  • 托管执行和公共语言基础结构
  • iOS 8 自适应 Cell
  • 云计算:大数据时代的系统工程(二)
  • JS组件系列——封装自己的JS组件,你也可以
  • iPad应用开发实践指南:菜鸟如何用ios 5开发ipad上的复杂应用程序
  • swift-var/let定义变量和常量
  • Django数据库迁移组件South的试用 1
  • ios多线程操作(五)—— GCD串行队列与并发队列
  • 推荐 30 款最好的免费项目管理软件
  • 【BZOJ2152】聪聪可可
  • 121231异机恢复oracle数据库
  • Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python...
  • ----------
  • 深入了解以太坊
  • JS 中的深拷贝与浅拷贝
  • 【comparator, comparable】小总结
  • Bootstrap JS插件Alert源码分析
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • flutter的key在widget list的作用以及必要性
  • Intervention/image 图片处理扩展包的安装和使用
  • IOS评论框不贴底(ios12新bug)
  • js对象的深浅拷贝
  • Js基础——数据类型之Null和Undefined
  • Linux CTF 逆向入门
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • use Google search engine
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 分布式熔断降级平台aegis
  • 分享几个不错的工具
  • 基于Android乐音识别(2)
  • 前端技术周刊 2019-02-11 Serverless
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 延迟脚本的方式
  • 云大使推广中的常见热门问题
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 【干货分享】dos命令大全
  • Semaphore
  • 带你开发类似Pokemon Go的AR游戏
  • #《AI中文版》V3 第 1 章 概述
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)图像的%2线性拉伸
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Sublime Text3配置Lua运行环境