Почему бы не
image_log = gtk.Image()
image_log.set_from_file("test.png")
image_logb = gtk.Image()
image_logb.set_from_file("test.png")
self.out_button = gtk.Button()
self.out_button.add(image_log)
self.err_button = gtk.Button()
self.err_button.add(image_logb)
another_box.pack_start(self.out_button, False)
another_box.pack_start(self.err_button, False)
Это всего лишь две дополнительные строки кода, и, возможно, более эффективный, чем клонирование / копирование первого объекта изображения.
Таким образом, вы можете обрабатывать out_button
и err_button
независимо. Но имеет смысл использовать один и тот же gtk.Image()
объект для обеих кнопок ... это просто изображение.
Редактировать
Чтобы избежать дублирования (кажется, что overkill ) вы можете написать фабрику для объектов gtk.Image () из того же изображения.
def gtkimage_factory(num_objs, image_file):
i=0
imglist = []
while i<num_objs:
img_ob = gtk.Image()
img_ob.set_from_file(image_file)
imglist.append( img_ob )
i+=1
return imglist
Или что-то в этом роде, вы поняли идею. Но фабрика кажется излишней, если вы не производите загрузок этих вещей и не нуждаетесь в них независимо от GTK.
Тогда ...
image_list = gtkimg_factory(2, "test.png")
self.out_button = gtk.Button()
self.out_button.add(image_list[0])
self.err_button = gtk.Button()
self.err_button.add(image_list[1])
another_box.pack_start(self.out_button, False)
another_box.pack_start(self.err_button, False)
Может быть, это как-то связано с управлением ресурсами GTK?