【问题标题】:Have an error when using lambda in python, do you know why?在python中使用lambda时出现错误,你知道为什么吗?
【发布时间】:2021-03-23 07:17:54
【问题描述】:

我试图有一个复选框,当点击时切换变量的值(w/tkinter):

import tkinter as tk

CheckVar1 = tk.IntVar()
    isOn = False
    C1 = tk.Checkbutton(window, text = "Decreasing", variable = CheckVar1, onvalue=1, offvalue=0, height=5)
    C1.place(relx=0.05, rely=0.3)
    C1.bind("<<CheckboxSelect>>",lambda _: isOn = True if isOn == False else False)
    print(isOn)

但是我遇到了 lambda 问题:

lambda _: isOn = True if isOn == False else False

它给出了一个错误,你知道为什么吗?我该如何解决?

【问题讨论】:

  • 您不能在lambda 内分配。改为创建一个函数。
  • 不知道,非常感谢
  • isOn 不是必需的。使用CheckVar1 获取检查按钮的当前状态。
  • 成功了,谢谢。但我根本不必使用我自己的变量。我可以使用 CheckVar1 使其工作。我仍然很感激:)

标签: python tkinter lambda


【解决方案1】:

lambdas 不应该有赋值,它只是用于表达式和调用其他函数。但是有一种在lambda 内部分配的hacky 方法。但首先是正确的方法:

def check():
    global isOn
    if not isOn:   
        isON = True
    else:
        isOn = False

因此,hacky 方法包括使用execlambda 中执行python 代码,例如:

C1.bind("<<CheckboxSelect>>",lambda _: exec('isOn=not isOn',globals())) # Thanks to Dr. Casual for the idea
# Also recommended to use event or e or something else instead of _

所以您可以将整个 check() 更改为:

def check():
    global isOn
    isOn = not isOn

【讨论】:

  • 对于简短易读的代码,请执行isOn = not isOn :)
猜你喜欢
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多