python将列表引用传递给函数
在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
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