当前位置: 首页 > 面试题库 >

复选按钮和按钮:使用lambda

墨星鹏
2023-03-14
问题内容

我正在尝试根据列表创建多个复选框,但是看起来好像在搞砸按钮的 命令调用变量方面

我的代码是:

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”,“ place”值的onClick始终为1。


问题答案:

制作lambda函数时,其引用仅在调用函数时解析为值。因此,如果您lambda在循环中使用一个变量值(i在您的代码中)创建函数,则每个函数都将相同i-最后一个可用。

但是,当您使用默认参数定义函数时,在定义该函数后便会立即解析该引用。通过在lambda函数中添加这样的参数,可以确保它们获得您想要的值。

lambda i=i: self.onClick(i)

如果您想做更多研究,这称为词汇作用域或闭包。



 类似资料:
  • 这是一个 列表 拓展,可以用来创建单选和复选按钮组。 复选按钮组 <div class="list-block"> <ul> <!-- Single chekbox item --> <li> <label class="label-checkbox item-content"> <!-- Checked by default -->

  • 复选框用来提供一组选项,可以选中不止一个选项。传统的桌面程序的单选按钮组没有对触摸输入的方式进行优化,所以在Jquery Mobile中,label也被样式化为复选按钮,使按钮更长,容易点击。并添加了自定义的一组图标来增强视觉反馈。 单选按钮组和复选按钮组都是用标准的html代码写的,但是都被样式化得更容易点击。你所看见的控件其实是覆盖在input上的label元素, 所以如果图片没有正确加载,你

  • 问题内容: 我想为捐赠表格设置一组单选按钮,但是我希望它们看起来像按钮而不是圆形表盘。 做这样的最好的方法是什么?另外,请记住,它必须与IE8一起使用。 这是我到目前为止的内容 谢谢 问题答案: 可以使用CSS来完成,而无需大型框架。我已经使用复选框和单选按钮完成了此操作。 此方法无需添加新的HTML或引入任何JS库即可。 => HTML的新命令 这是一个十分钟的hacky版本,您可以进一步清理它

  • 这里是react初学者,这里我有antd复选框,我想把这个复选框改成一个按钮,但仍然有复选框功能:这里是我的复选框: null null 这就是我试着做的,我试着给checkbox不透明度为零来隐藏它,然后把checkbox放在一个按钮里面,以改变它的外观为按钮,并且有checkbox的功能,但是问题是,这个新按钮是工作的,如果你点击按钮的左侧,但右侧不工作,有什么解决方案吗?: null nul

  • 我想创建一个单选按钮风格的投票系统使用的图标在Flutter(Dart),看起来像这样:投票图标 这个概念很简单:页面将显示一部电影,然后用户可以使用上面的图标按钮对该电影进行投票。当进行投票时,图标将变为红色,影片将添加到数组中。 我正在纠结的棘手部分是: 更改选定后图标的颜色 确保其他图标保持黑色 如果用户选择了其他选项,则将其他图标更改为黑色 提前道谢!

  • 主要内容:创建单选按钮,单选按钮组,单选按钮事件,单选按钮焦点单选按钮通常组合在一起,以便用户进行单选,即用户只能在单选按钮列表中选择一个项目。 例如,当选择鞋子尺寸时,我们通常从列表中选择一个尺寸。 单选按钮只能执行:选择或取消选择。 以下代码显示,当放置在中时,只能选择一个。 上面的代码生成以下结果。 创建单选按钮 包中的类有两个构造函数。 要为其标签创建一个带有空字符串的单选按钮,然后再设置标签。 要创建具有指定标签的单选按钮。 方法带有参数可以显式选