tkinter canvas上的多个任务?

时间:2013-09-10 10:36:22

标签: python-2.7 tkinter multiprocessing

我正在尝试在运行绑定事件的同时更新画布背景。

(来自代码)在do_popup弹出菜单中将实现,conti将不断更改画布背景颜色。如何在画布不断更新时使用弹出选项。

示例代码:

from Tkinter import *
root = Tk()
def do_popup(event,w2):
    print w2 # inplace of print some popupmenu will be implemented
def conti():
    idt=1
    while idt==1:
        w.config(bg="red") # in place of red it will be a random color
        w.update_idletasks()
w= Canvas(root, width=600, height=600)
w.grid(row=0, column=0)
line1 = w.create_line(200,200,300,300, width=10, tags="line1", fill="black")
w.tag_bind(line1, "<Button-3>", lambda e, w2="test1" :do_popup(e,w2))
f = Frame(root)
f.grid(row=0, column=1, sticky=N)
f1=Button(f, text='visual', command=lambda :conti())
f1.grid(row=0, column=1,columnspan=1, sticky=W+N+S+E)
mainloop()

会进行多处理工作吗? 我正在使用Windows 7 32位与python 2.7.3

提前致谢

1 个答案:

答案 0 :(得分:1)

当您的脚本进入主循环时,将执行事件。

要进行重复更新,我喜欢这样做:

def conti():
    try:
        w.config(bg="red") # in place of red it will be a random color
    finally:
        # start conti after 10 milliseconds, 
        root.after(10, conti) 
        # could also be 0ms to handle events
root.after(0, conti)

您可以将root.mainloop视为

while not (root.quit was called):
    root.update()

这样做可以做到:

root.quit()

conti自动停止。

mainloops中的线程没有并发性。 但是当你创建一个自己的对话框并且conti将继续时,你可以在某处放置一个mainloop()。 如果您使用模块tkMessageBox(Python2)或tkinter.messagebox(Python3),那么您应该在对话框打开时运行conti

这会回答你的问题吗?

PS:当你关闭窗口时,执行root.protocol("WM_DELETE_WINDOW", root.quit)以使主循环结束。