python - 在按钮命令中修改没有全局变量的lambda函数中传递的变量
问题描述
是否有任何可能的方法来更改我在 lambda 函数中作为参数传递的现有变量而不使用全局变量?
temp.btn['command'] = lambda temp=temp: last_btn = connect_buttons(temp, last_btn)
这会引发一个错误,因为 lambda 不能使用赋值,所以返回值似乎没有问题,而且似乎全局变量不仅在 python 中是“不好的做法”。由于可变对象只是列表 afaik,我想到了last_btn
用 1 个元素制作列表,但我一直想知道除了这些“丑陋”的解决方案之外是否真的没有其他选择。还是我的假设是错误的,并且这些解决方案之一是常用的?
//添加编辑:
def connect_buttons(btn1, btn2): # takes the_button
global cary
if not (btn1 and btn2):
if btn1:
return btn1
return btn2
left = btn1
right = btn2
if isinstance(left, right_button):
left = btn2
right = btn1
for a_line in cary:
if a_line.start_button == left:
cvs.after(0, cvs.delete, a_line.line_id)
temp_id = cvs.create_line(left.x, left.y, right.x, right. y)
cary.append(line_class(temp_id, left, right))
return None
这是用一条线连接 2 个按钮的功能。由于我仍在学习并且对 tkinter 库不太熟悉,因此它可能很粗糙。right_button
并且left_button
基本上tkinter.Buttons
都有一些额外的信息,但每个都有自己的类,使其更容易使用。有可能我的整个概念是错误的,应该以其他方式提出。我期待任何可以帮助我的信息。
解决方案
推荐阅读
- ant - 如何在 JMeter 测试计划的 ant 报告中获取断言结果
- r - 我该如何调试:在使用 sdr 权重运行 svyby 后出现“colSums 中的错误(wts [,i] * x * pw)”?
- kubernetes - 节点端口的 K8s 入口。初学者示例
- javascript - 如何使通过 useState 钩子改变状态的函数可重用?
- javascript - 将大文件(更多 2GB)转换为 base64 字符串转换时浏览器断开连接
- c# - SendKeys.SendWait(" "); 抛出 StackOverFlowException
- javascript - 如何在 jQuery 中仅提取 window.location.pathname 的最后一部分?(内有详细说明)
- r - 更新R中等效列的表
- c++ - 我可以继承 std::string 以添加一些额外的成员/标志吗?
- swift - Swift: Dismiss a FormViewController in Eureka-forms