gpt4 book ai didi

python - 哪个动态创建的对象调用了函数?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:13 26 4
gpt4 key购买 nike

我正在制作一个带有 Tkinter GUI 的 python 应用程序。到目前为止,它有一些动态创建的列表框,我会将它们全部链接到一个滚动条。我需要一种方法让 yscroll() 知道哪个列表框已滚动。将 i 变量传递给 yscroll() 不起作用。

from Tkinter import *

class MyApp(Tk):
def __init__(self):
Tk.__init__(self)
self.title(' - My App - ')

self.listboxes = []
for i in xrange(5):
lb = Listbox(self, yscrollcommand=lambda i, *args: self.yscroll(i, *args))
for x in xrange(30):
lb.insert('end', x)

lb.pack(fill='y', side='left')
self.listboxes.append( lb )

self.scrollbar = Scrollbar(self, orient='vertical')
self.scrollbar.pack(side='right', fill='y')

def yscroll(self, i, *args):
print i
print args

ma = MyApp()
ma.mainloop()

最佳答案

好像是usual recipe for using a variable from a loop in a lambda与使用 *args 的参数解包一起使用时无法正常工作。但是由于 *args 在这种情况下似乎总是包含两个值(视口(viewport)的开始和结束,除非我弄错了),你可以重写你的 lambda像这样:

lb = Listbox(self, yscrollcommand = lambda x, y, i=i: self.yscroll(i, x, y))

或者您可以创建一种“元 lambda”,为 i

创建具有正确值的 lambda
make_callback = lambda i: lambda *args: self.yscroll(i, *args)
lb = Listbox(self, yscrollcommand = make_callback(i))

在定义 lambda 时,两者都会将 i 绑定(bind)到 i 的值。

关于python - 哪个动态创建的对象调用了函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664450/

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