我想创建一个简单的界面,该界面将您教室中的学生姓名列表作为输入,并为每个人输出一行按钮,
例如:
C:\Users\admargosy\AppData\Local\Temp\tmp3D08.tmp
单击每个按钮时,会将该学生姓名和行为的日志写入输出文件。
我的问题是,当前它使每个按钮都为学生姓名列表上的最后一位学生写日志。据我了解,这是由于“后期绑定”造成的,但是这次我无法在上学之前独自解决这个问题。
John Johnson (Idle)(Talking)(etc)
Doris Day (Idle)(Talking)(etc)
答案 0 :(得分:1)
您必须将学生对象(或其标识符)传递给函数。怎么做? This可能会帮助您找出答案。
您可以在循环中初始化变量x
,然后(通过循环)对其进行更改,最后它具有循环中的最后一个值(在您的情况下为range(len(currentperiod)) - 1
)。然后,当在函数中使用它时,似乎将它用作实际值,而您期望它具有与循环中相同的x
值。
最后,我想写的是,您应该看一下面向对象的编程。如果每个学生只是一个班级的实例并且拥有所有方法,那么可能更容易编写和理解实际发生的情况。
答案 1 :(得分:0)
您需要确保在执行代码 时x
具有适当的值;您的Button
调用仅绑定功能配置文件,而不绑定调用时间参数。
只需在每次调用时分别传递所需的值即可。
def talking(id):
name=currentperiod[id]
behavior='Talking'
behaviorlog(name,behavior)
然后,您将学生ID(x
的适当值)作为呼叫的一部分传递。或者,创建一个Student
类,以便在单击学生的按钮之一时传递整个学生对象。