首页 > 解决方案 > 在按钮命令中修改没有全局变量的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都有一些额外的信息,但每个都有自己的类,使其更容易使用。有可能我的整个概念是错误的,应该以其他方式提出。我期待任何可以帮助我的信息。

标签: pythontkinter

解决方案


推荐阅读