use*_*118 2 python loops tkinter
我有以下代码可以在循环中创建一系列绑定:
from Tkinter import *
keys = {0:'m', 1:'n', 2:'o'}
def SomeFunc(event=None,number=11):
print keys[number], number
root = Tk()
field = Canvas(root, height = 200, width = 200, bg = "gray")
for i in range(2):
root.bind("<KeyPress-%c>" % keys[i],lambda ev:SomeFunc(ev,i))
field.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我按'm'或'n'时,函数SomeFunc以可变的'i'作为参数被调用。我希望在按“ m”时以0作为参数(使用“ bind”时使用数字“ i”),在按“ n”时以1作为参数来调用它。能做到吗?
在这里你的问题是变量i被捕获由lambda,但你可以通过创建例如小助手功能得到解决:
for i in range(2):
def make_lambda(x):
return lambda ev:SomeFunc(ev,x)
root.bind("<KeyPress-%c>" % keys[i], make_lambda(i))
Run Code Online (Sandbox Code Playgroud)
这会为您创建的每个绑定创建一个新作用域,因此执行for循环和i在循环期间进行更改不会影响您已经使用过的lambda函数。
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |