PyGObject 和 Glade,动态改变按钮图标
我想知道怎么动态地改变用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
看起来这个错误是我复制的答案中的问题,但我按照他的方法做却不管用。
我听说可以在标签上放图片,那我怎么才能找到用glade制作的按钮的标签名字呢?
我在参考这个答案:
使用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 个回答
2
我猜你是在用PyGObject(GTK+ 3.x),因为你用的是Gtk
而不是gtk
。如果是这样的话,你应该用Gtk.IconSize.BUTTON
,而不是Gtk.ICON_SIZE_BUTTON
。
这是因为GObject Introspection会把常量放在一个命名空间里,而不是像我们在C源代码中看到的那些长常量。一般来说,根据上下文很容易就能搞清楚该用哪个。