Python 列表中的 Tkinter 标题更改
Python Tkinter title change from list
我试图通过下面的代码简化我的程序的问题。我可以让它工作,但很好奇为什么它不能使用下面的方法工作。
打印值显示第一个索引,但函数调用最后一个索引。
list1 = ["Title_0", "Title_1"]
for i, string in enumerate(list1):
if i == 0:
print str(i) + ", " + string # Prints: 0, Title_0
btn_monty = Button(the_window, text='Monty Python', command = lambda:the_window.title(string))
#### This also doesn't work ####
# btn_monty = Button(the_window, text='Monty Python', command = lambda:the_window.title(list1[i]))
问题是 lambda 中的 string
是变量 string
上的 closed,而不是 string
的值。这意味着变量 string
的值在实际调用按钮之前不会被评估,并且当它被调用时它使用最新的 string
值,这对两个按钮都是相同的。
您可以尝试使用默认参数来传递 string
。例子-
list1 = ["Title_0", "Title_1"]
for i, strng in enumerate(list1):
print str(i) + ", " + strng # Prints: 0, Title_0
btn_monty = Button(the_window, text='Monty Python', command = lambda new_title=strng:the_window.title(new_title))
我还将变量更改为 strng
,这样它就不会与 string
模块冲突(如果您决定导入该模块,可以避免将来出现任何类型的问题) .此外,您应该确保使用 grid
或 pack
等放置按钮
我试图通过下面的代码简化我的程序的问题。我可以让它工作,但很好奇为什么它不能使用下面的方法工作。
打印值显示第一个索引,但函数调用最后一个索引。
list1 = ["Title_0", "Title_1"]
for i, string in enumerate(list1):
if i == 0:
print str(i) + ", " + string # Prints: 0, Title_0
btn_monty = Button(the_window, text='Monty Python', command = lambda:the_window.title(string))
#### This also doesn't work ####
# btn_monty = Button(the_window, text='Monty Python', command = lambda:the_window.title(list1[i]))
问题是 lambda 中的 string
是变量 string
上的 closed,而不是 string
的值。这意味着变量 string
的值在实际调用按钮之前不会被评估,并且当它被调用时它使用最新的 string
值,这对两个按钮都是相同的。
您可以尝试使用默认参数来传递 string
。例子-
list1 = ["Title_0", "Title_1"]
for i, strng in enumerate(list1):
print str(i) + ", " + strng # Prints: 0, Title_0
btn_monty = Button(the_window, text='Monty Python', command = lambda new_title=strng:the_window.title(new_title))
我还将变量更改为 strng
,这样它就不会与 string
模块冲突(如果您决定导入该模块,可以避免将来出现任何类型的问题) .此外,您应该确保使用 grid
或 pack
等放置按钮