python - 从循环创建多个函数以创建按钮行
问题描述
我想创建一个简单的界面,将教室中的学生姓名列表作为输入,并为每个学生输出一行按钮,
前任:
John Johnson (Idle)(Talking)(etc)
Doris Day (Idle)(Talking)(etc)
单击每个按钮时,它会将该学生姓名和行为的日志写入输出文件。
我的问题是,它目前使每个按钮都为学生姓名列表中最后一个学生写一个日志。据我了解,这是由于“后期绑定”造成的,但这次我无法在开学前的时间内自行解决。
currentperiod= [studentname1, studentname2, ...etc]
def behaviorlog(name, behavior):
write name and behavior to a spreadsheet
def idle():
name=currentperiod[x]
behavior='Idle'
behaviorlog(name,behavior)
def talking():
name=currentperiod[x]
behavior='Talking'
behaviorlog(name,behavior)
def late():
name=currentperiod[x]
behavior='Late'
behaviorlog(name,behavior)
def rude():
name=currentperiod[x]
behavior='Rude'
behaviorlog(name,behavior)
def misplaced():
name=currentperiod[x]
behavior='Misplaced'
behaviorlog(name,behavior)
from tkinter import *
master= Tk()
for x in range(len(currentperiod)):
Label(master, text=currentperiod[x]).grid(row=x, sticky = W)
button1=Button(master, text='Idle', command=idlemaker)
button1.grid(row=x, column=1, sticky=W, pady=4)
button2=Button(master, text='Talking', command=talking)
button2.grid(row=x, column=2, sticky=W, pady=4)
button3=Button(master, text='Late', command=late)
button3.grid(row=x, column=3, sticky=W, pady=4)
button4=Button(master, text='Rude', command=rude)
button4.grid(row=x, column=4, sticky=W, pady=4)
button5=Button(master, text='Misplaced', command=misplaced)
button5.grid(row=x, column=5, sticky=W, pady=4)
mainloop( )
解决方案
您必须将一个学生对象(或他的标识符)传递给该函数。怎么做?这可能会帮助您弄清楚。
您在循环中初始化变量x
,然后更改它(通过循环),最后它具有循环中的最后一个值(在您的情况下是range(len(currentperiod)) - 1
)。然后,当它在您的函数中使用时,它似乎将其用作实际值,而您期望它具有x
循环中的值。
我想写的最后一点是,你应该看看面向对象的编程。如果每个学生都只是一个班级的一个实例并且拥有所有的方法,那么您可能更容易编写和理解真正发生的事情。
推荐阅读
- php - 类型错误:在注册时传递给 Illuminate\Auth\SessionGuard::login() 重定向的参数 1 不起作用
- windows - 尝试在 Anki 中显示 LaTeX 会导致错误?
- android - 在 volley post 请求中发送表单数据
- python - PyCharm Sqlalchemy - 通过终端添加数据
- c# - 如何最大化 WinForms 应用程序的 UserControl 插件的宽度
- makefile - 将环境变量传递给 Makefile 中的依赖目标
- sql - SQL concat 并转换为第一个日期
- biopython - Biopython 无法直接访问异质残基
- javascript - TypeError:未定义不是对象 this.prop
- perl - 使用 perl 从复杂的输出文本文件中提取数据并放入新的文本文件