栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python

当您将新线程加入主线程时,它将等待直到线程完成,因此即使您正在使用多线程,GUI也会阻塞。

如果要将逻辑部分放在其他类中,则可以直接将Thread子类化,然后在按下按钮时启动该类的新对象。Thread的此子类的构造函数可以接收Queue对象,然后您就可以与GUI部件进行通信。所以我的建议是:

  • 在主线程中创建一个队列对象
  • 创建一个可以访问该队列的新线程
  • 定期检查主线程中的队列

然后,您必须解决以下问题:如果用户两次单击同一按钮两次(每次单击都会产生一个新线程),但是可以通过禁用开始按钮并在调用后再次启用它来解决此问题self.prog_bar.stop()。

import Queueclass GUI:    # ...    def tb_click(self):        self.progress()        self.prog_bar.start()        self.queue = Queue.Queue()        ThreadedTask(self.queue).start()        self.master.after(100, self.process_queue)    def process_queue(self):        try: msg = self.queue.get(0) # Show result of the task if needed self.prog_bar.stop()        except Queue.Empty: self.master.after(100, self.process_queue)class ThreadedTask(threading.Thread):    def __init__(self, queue):        threading.Thread.__init__(self)        self.queue = queue    def run(self):        time.sleep(5)  # Simulate long running process        self.queue.put("Task finished")


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382718.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号