【发布时间】:2015-06-23 01:05:16
【问题描述】:
我正在尝试使用 PyGObject 创建自定义小部件。例如,我想创建这个CustomButton 小部件,它在按钮中添加图像和标签(仅用于示例):
#!/usr/bin/python
#-*- coding: utf-8 -*
from gi.repository import Gtk
class ImageButton(Gtk.Widget):
def __init__(self, label, image):
Gtk.Widget.__init__(self)
self.hbox = Gtk.HBox()
self.label = Gtk.Label(label)
self.image = Gtk.Image.new_from_stock(image, Gtk.IconSize.MENU)
self.hbox.pack_start(self.image, False, False, 3)
self.hbox.pack_start(self.label, False, False, 3)
self.button = Gtk.Button()
self.button.add(self.hbox)
在另一个文件或类中,我可以这样使用它:
button = ImageButton("My label", Gtk.STOCK_HOME)
但是当我想使用它时,我不得不调用button属性,像这样:
# Connect the "clicked" event
button.button.connect("clicked", on_clicked_button)
# Add the button in a container
window.add(button.button)
有效但不实用。如何创建一个像任何其他小部件一样工作的自定义小部件:
button = ImageButton("My label", Gtk.STOCK_HOME)
button.connect("clicked", on_clicked_button)
window.add(button)
【问题讨论】:
-
你为什么不能写
button.button? -
有可能,但我想创建一个真正的自定义小部件。我不想写
button.button.connect("clicked", on_clicked_button),只想写button.connect("clicked", on_clicked_button) -
所以写一个
connect方法... -
我真的不明白为什么你有一个按钮属性并且继承自
Button。 -
我有一个按钮属性并继承自
Button,因为我认为这是一个很好的解决方案,但如果你有答案,我会接受 :)