我已尝试通过以下代码简化程序问题。我可以让它工作,但我很好奇为什么它不能使用下面的方法。
打印值显示第一个索引,但该函数调用最后一个索引。
<head>
<title>Music Project</title>
<link href="MusicProject.css" rel="stylesheet" />
<div id="header">
<h1 align="center" style="margin-top: -155px"><img src="logo.png" alt="logo" id="logo" height="500" width="700" /></h1>
</div>
<div id="nav">
<ul>
<li><a href="Music Project.html">Home</a></li>
<li><a href="Artist.html">Artists</a></li>
<li><a href="album.html">Mixtapes/Albums</a></li>
<li><a href="suggestions.html">Suggestions</a></li>
<li><a href="about.html">About</a></li>
</ul>
</div>
</head>
#header {
background-color: #888888;
height:380px;
margin:0px;
padding:0px;
}
body {
background-color: #C0C0C0;
margin:0px;
padding:0px;
}
#main {
overflow: auto;
}
#content {
float:left;
}
#side {
float:left;
}
#nav {
height: 42px;
background-color: #888888;
}
#nav ul {
list-style-type:none;
height:30px;
padding:0px;
margin:0px;
}
#nav ul li {
float:left;
margin:10px;
width:246px;
text-align:center;
font-family:"Arial";
font-size: 23px;
color: #00004B;
}
#nav ul li a {
display: inline;
width: 246px;
}
答案 0 :(得分:1)
问题是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
等放置按钮