【问题标题】:tkinter bind function with variable in a loop [duplicate]tkinter在循环中使用变量绑定函数[重复]
【发布时间】:2012-12-24 21:47:55
【问题描述】:

我有这段代码可以在循环中创建一系列绑定:

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()

我的问题是,当我按“m”或“n”时,函数SomeFunc 会以可变的“i”作为参数调用。我希望在我按“m”时用 0 作为参数(使用“bind”时的数值“i”)调用它,在按“n”时用 1 调用它。这可以做到吗?

【问题讨论】:

    标签: python loops tkinter


    【解决方案1】:

    您的问题是变量ilambda捕获,但您可以通过创建一个小辅助函数来解决这个问题,例如:

    for i in range(2):
        def make_lambda(x):
            return lambda ev:SomeFunc(ev,x)
        root.bind("<KeyPress-%c>" % keys[i], make_lambda(i))
    

    这将为您创建的每个绑定创建一个新范围,因此执行 for 循环并在循环期间更改 i 不会影响您已经使用的 lambda 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多