0

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)の結果です。その直前に、空のリストが表示されます:(

4

1 に答える 1