python将列表引用传递给函数

python将列表引用传递给函数,python,list,function,arguments,glade,Python,List,Function,Arguments,Glade,在python中,类中包含以下代码: def __init__(self): presets = [] for i in range(6): presets.append(dbuilder.get_object("button_pres"+str(i))) presets[i].connect("clicked", self.on_preset_button, i, presets) print presets def on_pr

在python中,类中包含以下代码:

def __init__(self):
    presets = []
    for i in range(6):
        presets.append(dbuilder.get_object("button_pres"+str(i)))
        presets[i].connect("clicked", self.on_preset_button, i, presets)
        print presets

def on_preset_button(self, origin, i, presets):
    recall(i)
    print presets
现在,当我在for循环中调用print presets时,我得到了正确的结果,列表在每次迭代中都会增长

然而,在on_preset_按钮中,我得到了空列表。我以为我是在将对预设的引用传递给函数connect,而函数connect又将引用传递给on_preset_按钮。但似乎不是

我想访问我之前附加到预设的6个元素。请帮忙

以下是长版本:

import gtk

from galicaster.core import context
from galicaster.utils.visca import recall

class DistribUI(gtk.Box):
    __gtype_name__ = 'DistribUI'

    def __init__(self):
        gtk.Box.__init__(self)
        dbuilder= gtk.Builder()
        dbuilder.add_from_file(get_ui_path('distrib.glade'))
        self.builder = dbuilder

        # other gui elements omitted

        presets = []
        for i in range(6):
            presets.append(dbuilder.get_object("button_pres"+str(i)))
            presets[i].connect("clicked", self.on_preset_button, i, presets)
            print presets

    def on_preset_button(self, origin, i, presets):
            recall(i)
            print presets
下面是加载类后的输出:

[<gtk.Button object at 0x204ab40 (GtkButton at 0x20ad330)>]
[<gtk.Button object at 0x204ab40 (GtkButton at 0x20ad330)>, <gtk.Button object at 0x204ab90 (GtkButton at 0x20ad4b0)>]
[<gtk.Button object at 0x204ab40 (GtkButton at 0x20ad330)>, <gtk.Button object at 0x204ab90 (GtkButton at 0x20ad4b0)>, <gtk.Button object at 0x204ac30 (GtkButton at 0x20ad630)>]
[<gtk.Button object at 0x204ab40 (GtkButton at 0x20ad330)>, <gtk.Button object at 0x204ab90 (GtkButton at 0x20ad4b0)>, <gtk.Button object at 0x204ac30 (GtkButton at 0x20ad630)>, <gtk.Button object at 0x204acd0 (GtkButton at 0x20ad3f0)>]
[<gtk.Button object at 0x204ab40 (GtkButton at 0x20ad330)>, <gtk.Button object at 0x204ab90 (GtkButton at 0x20ad4b0)>, <gtk.Button object at 0x204ac30 (GtkButton at 0x20ad630)>, <gtk.Button object at 0x204acd0 (GtkButton at 0x20ad3f0)>, <gtk.Button object at 0x204ad70 (GtkButton at 0x20ad570)>]
[<gtk.Button object at 0x204ab40 (GtkButton at 0x20ad330)>, <gtk.Button object at 0x204ab90 (GtkButton at 0x20ad4b0)>, <gtk.Button object at 0x204ac30 (GtkButton at 0x20ad630)>, <gtk.Button object at 0x204acd0 (GtkButton at 0x20ad3f0)>, <gtk.Button object at 0x204ad70 (GtkButton at 0x20ad570)>, <gtk.Button object at 0x204ae10 (GtkButton at 0x20ad6f0)>]

最后一行是recall(i)的结果,它是一个外部子流程。在此之前,您可以看到空列表:(

建议您在此处发布日志,源代码更好。
听起来像是连接函数在预设按钮上做了一些事情,按钮被称为

尝试打印
预设
内部
\uu初始化
。什么是
dbuilder
?看起来框架正在对列表做一些不支持用例的事情。dbuilder与glade一起工作,并从xml文件创建gui元素。例如:我声明glade文件中的一个GtkButoon元素。然后在python中,我可以使用dbuilder使用它的id构建按钮,在我的例子中是button_pres[0-5]。gui中显示所有6个按钮,单击它们可以执行预期的操作:正确执行第二个函数中的recall(I)。
[]
10 OK - no return value