Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用小部件ID作为名称,将使用Gtk.Builder创建的小部件对象分配给我的类属性?_Python_Gtk_Glade - Fatal编程技术网

Python 如何使用小部件ID作为名称,将使用Gtk.Builder创建的小部件对象分配给我的类属性?

Python 如何使用小部件ID作为名称,将使用Gtk.Builder创建的小部件对象分配给我的类属性?,python,gtk,glade,Python,Gtk,Glade,在我的\uuuu init\uuuu函数中,我尝试执行以下操作: 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 se

在我的
\uuuu init\uuuu
函数中,我尝试执行以下操作:

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)>

而不是我给这些小部件指定的具体名称


你对如何一次初始化所有小部件有什么想法吗?

我不知道你说的“初始化”是什么意思。好了,当构建器加载glade文件时,对象就准备就绪了。除非我误解了,否则我认为您只需要获取Glade加载的小部件的名称。可通过可构建的界面访问此文件,如下所示:

 name = gtk.Buildable(widget).get_name()

似乎没有办法获得小部件ID列表。您可以通过编写
\uuu getattr\uuuu

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

也许OP希望使用Glade中的名称将小部件对象转换为类成员
i.get_name()
返回类名而不是小部件id,例如,能够作为self.button1访问小部件button1。