在以下代码中,构造按钮的两种方式的作用不同:
from Tkinter import *
def buildButton1():
root = Tk()
Button( root, command = lambda : foo(1) ).pack()
Button( root, command = lambda : foo(2) ).pack()
def buildButton2():
root = Tk()
buttons = ( Button( root, command = lambda : foo(i) ) for i in range(2) )
map( lambda button : button.pack(), buttons )
def foo( number ):
print number
这两种方法都使Tkinter窗口具有两个表面上相同的按钮布局,但在第二个示例中-如果我们添加50个按钮而不是2,则看起来更简洁-传递到foo的值是最后一个迭代的i
所以在本例中,按下buildButton2生成的任何按钮都会打印1,其中buildButton1的按钮分别打印0和1。为什么会有区别?有没有办法让buildButton2按预期工作?你知道吗
编辑 有人指出这是一个重复的问题,更正确的方法是写:
buttons = ( Button( root, command = lambda i=i : foo(i) ) for i in range(2) )
从而得到预期的结果。谢谢你们!你知道吗
应用程序应该只有一个TK根。这仅仅是应用程序中的一个示例还是真实的代码?如果是真代码,那么每次“生成”按钮时都会尝试获取TK根。您应该将root=TK()移到主代码中,因为应用程序只有一个根。每一扇窗户,每一个按钮。。是这个根的孩子。你知道吗
你可以这样做:
相关问题 更多 >
编程相关推荐