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 ループで印刷プリセットを呼び出すと、反復ごとにリストが大きくなって正しい結果が得られます。
ただし、on_preset_button では空のリストを取得します。私は、プリセットへの参照を関数 connect に渡していると思っていました。これにより、参照が on_preset_button に渡されます。しかし、そうではないようです。
以前にプリセットに追加した 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)>]
たとえば、ボタン1をクリックした後の出力は次のとおりです。
[]
10 OK - no return value
最後の行は、外部サブプロセスであるrecall(i)の結果です。その直前に、空のリストが表示されます:(