相关疑难解决方法(0)

为什么在声明时执行Button参数"command"?

我的代码是:

from Tkinter import *

admin = Tk()
def button(an):
    print an
    print 'het'

b = Button(admin, text='as', command=button('hey'))
b.pack()
mainloop()
Run Code Online (Sandbox Code Playgroud)

按钮不起作用,在没有我的命令的情况下打印'hey'和'het'一次,然后,当我按下按钮时没有任何反应.

python tkinter

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

Python lambda闭包范围

我试图使用闭包来消除函数签名中的变量(应用程序将编写连接接口的Qt信号所需的所有函数,以控制大量参数到存储值的字典).

我不明白为什么使用lambda未包装在另一个函数中的情况会返回所有情况的姓氏.

names = ['a', 'b', 'c']

def test_fun(name, x):
    print(name, x)

def gen_clousure(name):
    return lambda x: test_fun(name, x)

funcs1 = [gen_clousure(n) for n in names]
funcs2 = [lambda x: test_fun(n, x) for n in names]

# this is what I want
In [88]: for f in funcs1:
   ....:     f(1)
a 1
b 1
c 1

# I do not understand why I get this
In [89]: for f in funcs2:
   ....:     f(1)
c 1
c 1
c …
Run Code Online (Sandbox Code Playgroud)

python lambda closures

27
推荐指数
1
解决办法
5857
查看次数

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 ×3

tkinter ×2

button ×1

closures ×1

lambda ×1