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

Tkinter:等待队列中的项目

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

Tkinter:等待队列中的项目

简介:我不会使用“ noob oddy的示例代码”
-这是一种根本有缺陷的方法。

我不是python专家,但是“ noob oddy”(在后台线程中调用root.event_generate(…))提供的示例代码似乎是“有根本缺陷的方法”。即,互联网上有几篇文章指出“从不在“
GUI线程”(通常是主线程)的上下文之外调用Tkinter函数/对象方法”。他的示例在大多数情况下都有效,但是,如果增加事件发生率,则示例的“崩溃率”将增加-
但是,特定行为取决于事件发生率和平台的性能特征。

例如,如果您进行更改,则将他的代码与Python 2.7.3结合使用:

       time.sleep(1)

至:

       time.sleep(0.01)

那么脚本/应用通常会在“ x”次迭代后崩溃。

经过大量搜索后,如果您“必须使用Tkinter”,则看来将“信息从后台线程获取到GUI线程”的最“防弹方法”是使用“
after()”小部件方法来轮询线程安全对象(例如“队列”)。例如,

################################################################################import threadingimport timeimport Queueimport Tkinter      as Tkimport Tkconstants  as TkConstfrom ScrolledText import ScrolledTextfrom tkFont       import Fontglobal topglobal dataQglobal scrTextdef thread_proc():    x = -1    dataQ.put(x)    x = 0    for i in xrange(5):        for j in xrange(20): dataQ.put(x) time.sleep(0.1) x += 1        time.sleep(0.5)    dataQ.put(x)def on_after_elapsed():    while True:        try: v = dataQ.get(timeout=0.1)        except: break        scrText.insert(TkConst.END, "value=%dn" % v)        scrText.see(TkConst.END)        scrText.update()    top.after(100, on_after_elapsed)top     = Tk.Tk()dataQ   = Queue.Queue(maxsize=0)f       = Font(family='Courier New', size=12)scrText = ScrolledText(master=top, height=20, width=120, font=f)scrText.pack(fill=TkConst.BOTH, side=TkConst.LEFT, padx=15, pady=15, expand=True)th = threading.Thread(target=thread_proc)th.start()top.after(100, on_after_elapsed)top.mainloop()th.join()## end of file #################################################################


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

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

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