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

当加载图标并且tk.mainloop在线程中时,Tkinter锁定Python

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

当加载图标并且tk.mainloop在线程中时,Tkinter锁定Python

我相信您不应该在其他线程上执行主循环。AFAIK,主循环应在创建窗口小部件的同一线程上执行。

我熟悉的GUI工具包(Tkinter,.NET Windows窗体)就是这种方式:您只能从一个线程操作GUI。

在Linux上,您的代码引发异常:

self.tk.mainloop(n)RuntimeError:从其他位置调用Tcl

以下之一将起作用(没有额外的线程):

if __name__ == '__main__':    t = tk.Tk()    t.iconbitmap('icon.ico')    b = tk.Button(text='test', command=exit)    b.grid(row=0)    t.mainloop()

带有额外的线程:

def threadmain():    t = tk.Tk()    t.iconbitmap('icon.ico')    b = tk.Button(text='test', command=exit)    b.grid(row=0)    t.mainloop()if __name__ == '__main__':    thread.start_new_thread(threadmain, ())    while 1:        sleep(1)

如果需要从tkinter线程外部与tkinter进行通信,建议您设置一个计时器来检查工作队列。

这是一个例子:

import Tkinter as tkimport threadfrom time import sleepimport Queuerequest_queue = Queue.Queue()result_queue = Queue.Queue()def submit_to_tkinter(callable, *args, **kwargs):    request_queue.put((callable, args, kwargs))    return result_queue.get()t = Nonedef threadmain():    global t    def timertick():        try: callable, args, kwargs = request_queue.get_nowait()        except Queue.Empty: pass        else: print "something in queue" retval = callable(*args, **kwargs) result_queue.put(retval)        t.after(500, timertick)    t = tk.Tk()    t.configure(width=640, height=480)    b = tk.Button(text='test', name='button', command=exit)    b.place(x=0, y=0)    timertick()    t.mainloop()def foo():    t.title("Hello world")def bar(button_text):    t.children["button"].configure(text=button_text)def get_button_text():    return t.children["button"]["text"]if __name__ == '__main__':    thread.start_new_thread(threadmain, ())    trigger = 0    while 1:        trigger += 1        if trigger == 3: submit_to_tkinter(foo)        if trigger == 5: submit_to_tkinter(bar, "changed")        if trigger == 7: print submit_to_tkinter(get_button_text)        sleep(1)


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

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

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