0

私の__init__関数では、次のことを実行しようとしています。

builder = gtk.Builder()
builder.add_from_file('main.glade')
builder.connect_signals(Handle())
self.list = builder.get_objects()

次に、GUI内のすべてのウィジェットの属性をクラスに追加します

for i in self.list:
    name = i.get_name()
    print name
    setattr(self, name, i)

私は得る:

<gtk.VBox object at 0x2fd5558 (GtkVBox at 0x2499000)>
<gtk.Button object at 0x2fd5580 (GtkButton at 0x240a1a8)>
<gtk.Button object at 0x2fd55a8 (GtkButton at 0x240a130)>
<gtk.Button object at 0x2fd55d0 (GtkButton at 0x240a0b8)>
<gtk.Window object at 0x2fd55f8 (GtkWindow at 0x2495010)>
<gtk.HBox object at 0x2fd5620 (GtkHBox at 0x2499058)>
<gtk.Button object at 0x2fd5648 (GtkButton at 0x240a220)>
<gtk.TextView object at 0x2fd5670 (GtkTextView at 0x249d060)>

そして、私がそれらのウィジェットに付けた特定の名前ではありません

すべてのウィジェットを一度に初期化する方法についてのアイデアはありますか?

4

2 に答える 2

1

ウィジェット ID のリストを取得する方法がないようです。オブジェクト属性をその場で割り当てることができます。__getattr__

class Settings:
  """Settings dialog"""

  def __init__(self):
    self._log = _log.getChild(self.__class__.__name__)
    self.builder = Gtk.Builder()
    self.builder.add_from_file("settings.glade")
    self.builder.connect_signals(self)

  def __getattr__(self, name):
    self._log.debug("Resolving %s", name)
    obj = self.builder.get_object(name)
    setattr(self, name, obj)
    return obj
于 2013-02-09T16:44:47.490 に答える
0

「初期化」とはどういう意味かわかりません。AFAIK、Builderがgladeファイルをロードすると、オブジェクトの準備が整います。誤解しない限り、Gladeがロードするウィジェットに使用する名前を取得する必要があると思います。これには、次のようにBuildableインターフェイスを使用してアクセスします。

 name = gtk.Buildable(widget).get_name()
于 2012-04-14T21:56:45.240 に答える