PyGObject和Glade,动态改变按钮的图标

时间:2014-06-22 14:15:03

标签: python glade pygobject

我怎么能动态改变用glade创建的按钮的图标?

______________________ 上次修改 _________________________________________

我正在尝试这个:

    self.button_waiting=self.builder.get_object('button_waiting')
    image=Gtk.Image()
    image.set_from_stock(Gtk.STOCK_DIALOG_ERROR, Gtk.IconSize.BUTTON)
    image.show()
    self.button_waiting.remove(image)
    self.button_waiting.add(image)

我收到此错误:

Gtk-CRITICAL **: gtk_container_remove: assertion `gtk_widget_get_parent (widget) 
==    GTK_WIDGET (container) || GTK_IS_ASSISTANT (container)' failed

(fresh_install:16299): Gtk-WARNING **: Attempting to add a widget with type 
GtkImage to a GtkButton, but as a GtkBin subclass a GtkButton can only contain 
one widget at a time; it already contains a widget of type GtkLabel

这似乎是我复制的答案的错误,但做他所做的并不适合我。

我读到可以将图像放在标签上,如何获得在林间空地制作的按钮的标签名称?

以下答案: replace image using gtk.image.set_from_file

___________________ 原始问题 _________________________________ 我试过这个:

    self.button_waiting=self.builder.get_object('button_waiting')
    self.button_waiting.set_label("Cancel")
    image=Gtk.Image.set_from_stock(Gtk.STOCK_DIALOG_ERROR, Gtk.ICON_SIZE_BUTTON)
    image.show()
    self.button_waiting.image.clear()
    self.button_waiting.add(image)

我收到以下错误:

AttributeError: 'gi.repository.Gtk' object has no attribute 'ICON_SIZE_BUTTON'

但我在参考手册上发现了GTK_ICON_SIZE_BUTTON>。<

1 个答案:

答案 0 :(得分:3)

我将假设您使用的是PyGObject(GTK + 3.x),这取决于您Gtk而不是gtk。如果是这种情况,那么您应该使用Gtk.IconSize.BUTTON而不是Gtk.ICON_SIZE_BUTTON

这是因为GObject Introspection将常量放入命名空间而不是我们在C源代码中看到的长常量。根据具体情况,通常很容易弄明白。