gpt4 book ai didi

python - 为列表中的每个项目制作 tkinter 按钮?

转载 作者:行者123 更新时间:2023-11-28 20:46:00 25 4
gpt4 key购买 nike

我想制作一些按钮,其中包含我从数据库返回的项目列表,所有这些按钮都调用传入列表项目的函数。类似这段代码但行得通的东西。此代码的问题在于所有按钮都使用 'item3' 调用该函数。

#!/usr/bin/env python
from Tkinter import *
root = Tk()
def func(name):
print name
mylist = ['item1','item2','item3']
for item in mylist:
button = Button(root,text=item,command=lambda:func(item))
button.pack()

root.mainloop()

最佳答案

这里有两件事:

  1. 您需要将以下行缩进一级:

    button.pack()

    目前,您只能在最后一个按钮上调用 pack 方法。进行此更改将导致为每个按钮调用它。

  2. 所有按钮都将 'item3' 发送到 func,因为这是 item 的当前值。重要的是要记住,lambda 函数包含的表达式是在运行时 计算的,而不是编译时。

    但是,同样重要的是要记住,函数的参数及其默认值(如果有的话)都是在编译时计算的,而不是在运行时。

    这意味着您可以通过为 lambda 提供一个默认值设置为 item 的参数来解决问题。这样做将为 for 循环的每次迭代“捕获”item 的值。

下面是解决这些问题的脚本版本:

from Tkinter import *
root = Tk()
def func(name):
print name
mylist = ['item1', 'item2', 'item3']
for item in mylist:
button = Button(root, text=item, command=lambda x=item: func(x))
button.pack()

root.mainloop()

关于python - 为列表中的每个项目制作 tkinter 按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21738149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com