use*_*258 7 python canvas tkinter
附加的代码使用“after”方法在画布上随机绘制正方形。当我使用“after_cancel”方法单击鼠标按钮时,我希望停止绘图,但它继续绘制..
这是代码。
#! /usr/bin/env python
from Tkinter import *
import time
import random
tk = Tk()
canvas = Canvas(tk, width=1920, height=1080, background="grey")
canvas.pack()
def xy(event):
xm, ym = event.x, event.y
def task():
w=random.randint(1,1000)
h=random.randint(1,1000)
canvas.create_rectangle(w,h,w+150,h+150)
def callback(event):
if True:
print("clicked2")
tk.after_cancel(task)
canvas.bind("<Button-1>",callback)
tk.after(1000,task)
tk.after(1000,task)
tk.mainloop()
Run Code Online (Sandbox Code Playgroud)
W1l*_*mvl 10
好吧,所以你快要让它工作了,你需要做的是设置tk.after(...)一个变量,而不是你想要停止的重复函数,然后当你想使用时after_cancel(...),你调用那个变量,它会在方法之后停止用那个名字
这将做到:
from Tkinter import *
import time
import random
tk = Tk()
canvas = Canvas(tk, width=1920, height=1080, background="grey")
canvas.pack()
def xy(event):
xm, ym = event.x, event.y
def task():
w=random.randint(1,1000)
h=random.randint(1,1000)
canvas.create_rectangle(w,h,w+150,h+150)
def callback(event):
if True:
print("clicked2")
# 'solve' is used here to stop the after... methods.
tk.after_cancel(solve)
canvas.bind("<Button-1>",callback)
solve = tk.after(1000,task)
# above and below tk.after is set to 'solve' a variable.
solve = tk.after(1000,task)
tk.mainloop()
Run Code Online (Sandbox Code Playgroud)
这将停止 after 方法并让 tk 窗口运行。
另一个解决方案是在回调函数中使用tk.destroy(), ortk.quit()或sys.exit()或类似的......虽然这些会杀死tk窗口。
我认为这回答了这个问题,如果不只是说,欢呼。
| 归档时间: |
|
| 查看次数: |
16414 次 |
| 最近记录: |