gpt4 book ai didi

python - 如何从命令中识别按钮?

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:49 25 4
gpt4 key购买 nike

我在 for 循环中创建了一个条目列表。所有条目都存储在一个列表中,以便我稍后可以获取所有输入:

inputs = [e.get() for e in self.entries]

但是,我还在 for 循环中的每个条目旁边创建了一个按钮(因此它们各自调用相同的函数)。我怎样才能让它识别哪个按钮属于哪个行/条目?我可以对事件做些什么吗?

row = 0
self.entries = []
self.comments = []
for n in names:
e = Entry(self.top, bd = 5)
e.insert(0, n)
e.grid(column = 1, row = self.row, sticky = 'NSWE', padx = 5, pady = 5)
self.entries.append(e)
self.comments += [""]
commentButton = Button(self.top, text = "comment", command = self.commentSelected)
commentButton.grid(column = 3, row = self.row, sticky = 'NSWE', padx = 5, pady = 5)
self.row = self.row + 1

最佳答案

是——使用回调垫片(柯里化(Currying)函数)

(由 Russell Owen 提供)

我发现除了通常给出的数据之外,我经常希望将额外的数据传递给回调函数。例如,Button 小部件不向其命令回调发送任何参数,但我可能想使用一个回调函数来处理多个按钮,在这种情况下我需要知道哪个按钮被按下了。

处理此问题的方法是在将回调函数传递给小部件之前定义回调函数,并包含您需要的任何额外信息。不幸的是,像大多数语言一样,Python 不能很好地处理早期绑定(bind)(定义函数时已知的信息)和后期绑定(bind)(调用函数时已知的信息)的混合。我个人发现最简单、最干净的解决方案是:

编写我的回调函数以将所有所需数据作为参数。使用回调垫片类创建一个可调用对象,该对象存储我的函数和额外参数,并在调用时执行正确的操作。换句话说,它使用保存的数据加上调用者提供的数据来调用我的函数。我希望下面给出的例子能让这一点更清楚。

我使用的回调垫片是 RO.Alg.GenericCallback,它可以在我的 RO 包中找到。下面的示例给出了不处理关键字参数的简化版本。所有填充程序代码均基于 Scott David Daniels 的 Python 配方,他称之为“柯里化(Currying)函数”(这个术语可能比“回调填充程序”更常见)。

#!/usr/local/bin/Python
""" Example showing use of a callback shim"""
import Tkinter

def doButton(buttonName):
""" My desired callback.
I'll need a callback shim
because Button command callbacks receive no arguments.
"""
print buttonName, "pressed"

class SimpleCallback:
""" Create a callback shim.
Based on code by Scott David Daniels
(which also handles keyword arguments).
"""
def __init__(self, callback, *firstArgs):
self.__callback = callback
self.__firstArgs = firstArgs

def __call__(self, *args):
return self.__callback (*(self.__firstArgs + args))


root = Tkinter.Tk()

buttonNames = ( "Button 1", "Button 2", "Button 3" )
for name in buttonNames:
callback = SimpleCallback( doButton, name )
Tkinter.Button( root, text = name, command = callback ).pack()

root.mainloop()

关于python - 如何从命令中识别按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26002376/

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