【问题标题】:How to have parameters to a button command in tkinter python3 [duplicate]如何在tkinter python3中为按钮命令提供参数[重复]
【发布时间】:2015-06-18 19:08:09
【问题描述】:

我希望有一个 UI,当我按下一个按钮时,控制台中会弹出一些东西。问题是在我按下按钮之前,这些东西会打印到控制台中。经过一些测试,我发现如果我在command参数中不使用括号来调用我的函数,它可以正常工作。

例如:一个名为 hello 的函数在控制台中打印 hello world,所以我将其称为 button=Button(master, command=hello) 而不是 button=Button(master, command=hello())

这种方式的问题是我不能使用参数。

这是一个与我类似的代码示例:

index={'Food':['apple', 'orange'], 'Drink':['juice', 'water', 'soda']}
Names=['Food', 'Drink']

def display(list):
    for item in list:
        print(item)

from tkinter import *
mon=Tk()
app=Frame(mon)
app.grid()

for item in Names:
    button=Button(mon, text=item, command=diplay(index[item]))
    button.grid()
mon.mainloop()

关于如何使用参数的任何想法?我希望这一切都有意义,但如果没有,请发表评论。谢谢。

【问题讨论】:

  • 您是否尝试将问题的标题粘贴到 Google 搜索中?

标签: python function python-3.x tkinter


【解决方案1】:

您正在寻找lambda 关键字:

from tkinter import *
index={'Food':['apple', 'orange'], 'Drink':['juice', 'water', 'soda']}
Names=['Food', 'Drink']

def display(list):
    for item in list:
        print(item)

mon=Tk()
app=Frame(mon)
app.grid()

for item in Names:
    Button(mon, text=item, command= lambda name = item: display(index[name])).grid()
mon.mainloop()

您必须使用 name = item 以便每次初始化按钮时,它都会从 for 循环中获取 item 的当前值。

例如,如果您使用 lambda: display(index[item]),则两个按钮都会显示 'Drink' 的值,因为这是循环中初始化的 lambda 函数的最后一个值。

【讨论】:

  • 谢谢你,而不是像其他人一样将其标记为重复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2018-12-19
相关资源
最近更新 更多