我正在尝试在运行绑定事件的同时更新画布背景。
(来自代码)在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
提前致谢
答案 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)
以使主循环结束。