Python Tkinter标题从列表中更改

时间:2015-09-23 01:50:46

标签: python tkinter enumerate

我已尝试通过以下代码简化程序问题。我可以让它工作,但我很好奇为什么它不能使用下面的方法。

打印值显示第一个索引,但该函数调用最后一个索引。

<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;
}

1 个答案:

答案 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模块冲突(如果您决定导入该模块,将来可以避免任何类型的问题)。此外,您应确保使用gridpack等放置按钮