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

Python-Tkinter分配按钮命令与lambda循环

陆臻
2023-03-14
问题内容

我正在尝试创建一些按钮(带有for),如下所示:

def a(self, name):
    print name

users = {"Test":"127.0.0.0", "Test2":"128.0.0.0"}
row = 1
for name in users:
    user_button = Tkinter.Button(self.root,
                                 text=name,
                                 command=lambda: self.a(name))
    user_button.grid(row = row, column = 0)
    row+=1

并且每个按钮都有自己的参数(Test得到Test和Test2得到Test2),但是当我按下按钮时,它们都打印“ Test2”,这意味着它们使用具有相同参数的相同功能

我该如何解决?


问题答案:

问题是你的lamba在for循环中。你的lambda正在使用该name变量,但是name每次通过for循环都会重新分配该变量。因此,最后,所有按钮都将获得name在for循环中分配的最后一个值。为了避免这种情况,你可以在lamba表达式中使用默认的关键字参数,如下所示:

user_button = Tkinter.Button(self.root,
                             text=name,
                             command=lambda name=name: self.a(name))

每次循环时,name它将变量的当前值绑定到lamba的name关键字参数,从而产生所需的效果。



 类似资料:
  • 我试图在一个for循环中创建按钮。在每个循环中,将i计数值作为命令值中的参数传递出去。因此,当从命令值调用函数时,我可以判断哪个按钮被按下并相应地操作。问题是,假设len是3,它将创建3个按钮,标题为“游戏1”到“游戏3”,但是当按下任何一个按钮时,打印值总是2,最后一次迭代。所以看起来按钮是作为单独的实体制作的,但是命令参数中的i值似乎都是一样的。下面是代码: 有没有办法在每次迭代时获取当前的i

  • 问题内容: 尝试在画布上实现按钮,该按钮在单击时会打开文件。 我的尝试如下 不幸的是,我的代码在我单击按钮之前就打开了该文件,该文件已运行。为什么? 问题答案: 当Python处理这两行时,它会在第一行看到这一点: 并将其解释为有效的函数调用。因此,它调用了该函数。 要解决此问题,请定义一个函数来处理该行之前的click事件,然后将按钮的opion分配给该函数: 或者,在这种情况下,甚至更好/更干

  • 问题内容: 我正在尝试制作一个构建检索表单,似乎按钮有问题…我是Python / tkinter GUI编程(和一般的GUI编程)的新手,并借用了Hello World应用程序的框架,并以此为基础。 在下面的代码中,我将“浏览”按钮的“命令”选项设置为在单击类时调用类的内部get_dir()函数。但是,一旦我尝试运行该应用程序,就会调用get_dir()函数,并提示我选择一个目录。有什么想法为什么

  • 然而,由于某些原因,所有这些按钮都相距很远,我不太确定它们的确切位置是由什么逻辑决定的。这是我的代码,用于设置窗口和按钮: 如果有人能告诉我为什么以及如何让按钮和字段离得更近,我将不胜感激。

  • 我正在尝试实现一个名为“五连胜”的游戏。我创建了一个15×15的列表来放置按钮。(我使用range(16),因为我还需要一行和一列来显示行号和列号) 我希望我的实现会像点击一个按钮时,它会变成一个标签。但是我不知道用户点击了哪个按钮。 我如何才能实现这一点?谢谢 在Python TKinter?中,有一个类似的问题,即如何确定哪个按钮被按出了按钮网格?。但我不太明白。

  • 我面临commandButton的问题,它只有在类型为submit时才起作用。有没有人可以看一下,让我知道是否有解决办法?下面的代码非常简单,并有足够的建议来说明我需要什么。方法test()未执行。方法runSubmit已成功执行。 我需要测试方法在没有提交的情况下执行,因为原始页面确实在提交期间执行了验证,test()方法必须在没有提交的情况下执行,因为这是提交之前的一个初步操作。 我正在使用P