【发布时间】:2015-07-02 10:49:03
【问题描述】:
我正在尝试根据列表制作多个复选框,但是看起来我搞砸了按钮的 命令调用 和 可变方面。
我的代码是:
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.courses = ["CSE 4444", "CSE 4343"]
self.vars = []
self.parent.title("Homework Helper")
self.course_buttons()
self.pack(fill=BOTH, expand=1)
def course_buttons(self):
x = 0
y = 0
for i in range(0, len(self.courses)):
self.vars.append(IntVar())
cb = Checkbutton(self, text=self.courses[i],
variable=self.vars[i],
command=lambda: self.onClick(i))
cb.select()
cb.grid(column=x, row=y)
y = y+1
def onClick(self, place):
print place
if self.vars[place].get() == 1:
print self.courses[place]
目前的测试是在复选框打开时在控制台上打印课程,但它仅适用于第二个按钮,即“CSE 4343”按钮。当我与按钮“CSE 4444”交互时,没有打印任何内容。
此外,无论我是单击“CSE 4343”按钮还是“CSE 4444”按钮,onClick 的“位置”值始终为 1。
【问题讨论】:
-
究竟是什么不起作用?与观察到的行为相比,预期的行为是什么?有任何错误信息吗?
-
@TigerhawkT3 我在编辑中提到了这些对不起。
-
由于lambda closure scoping,请尝试
lambda i=i: self.onClick(i)。
标签: python user-interface tkinter