相关疑难解决方法(0)

tkinter在for循环传递命令参数中创建按钮

我试图在for循环中创建tkinter中的按钮.并且每个循环都将i count值作为参数传递给命令值.因此,当从命令值调用函数时,我可以判断按下了哪个按钮并相应地执行操作.问题是,假设len为3,它将创建3个按钮,标题为"Game 1"到"Game 3",但是当按下任何按钮时,打印值总是2,即最后一次迭代.因此看起来按钮是作为单独的实体制作的,但命令参数中的i值似乎完全相同.这是代码:

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),command=lambda:self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)
def open_this(self, myNum):
    print(myNum)
Run Code Online (Sandbox Code Playgroud)

有没有办法在每次迭代时获得当前的i值以坚持使用该特定按钮?

python tkinter button

26
推荐指数
2
解决办法
2万
查看次数

这个python函数中的lambda表达式发生了什么?

为什么尝试创建curried函数列表不起作用?

def p(x, num):
    print x, num

def test():
    a = []
    for i in range(10):
        a.append(lambda x: p (i, x))
    return a

>>> myList = test()
>>> test[0]('test')
9 test
>>> test[5]('test')
9 test
>>> test[9]('test')
9 test
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

实际上我希望上述函数执行的功能是:

import functools
def test2():
    a = []
    for i in range (10):
        a.append(functools.partial(p, i))
    return a


>>> a[0]('test')
0 test
>>> a[5]('test')
5 test
>>> a[9]('test')
9 test
Run Code Online (Sandbox Code Playgroud)

python lambda

5
推荐指数
1
解决办法
460
查看次数

标签 统计

python ×2

button ×1

lambda ×1

tkinter ×1