在小部件中存储自定义信息,gobject-introspect

时间:2012-11-14 06:42:08

标签: python gtk gobject-introspection

有没有办法用小部件存储自定义信息?

例如,假设我有一个包含20个网址的列表。

我创建了20个按钮,每个按钮一个。

我想这样做,当我点击按钮时,会打开一个网址。但我需要一种方法来知道哪个按钮链接到哪个url,所以当按钮被clciked时,我可以将url传递给事件处理函数来打开它。

我想要实现此目的的另一个解决方案是创建一个扩展Gtk.Button类的自定义类,如此

class MyButton(Gtk.Button)
    def __init__(self, url):
        Gtk.Button.__init__(self)
        self.url = url
        ...

然后我可以简单地执行button = MyButton(url)

但这看起来有点矫枉过正。所以我想知道我是否可以在窗口小部件上存储自定义信息。

1 个答案:

答案 0 :(得分:3)

最简单的解决方案是将URL添加为传递给clicked信号处理程序的附加数据:

# handle_click will receive additional url arg along with the button
button.connect('clicked', handle_click, url)

在PyGTK中,你也可以通过分配给它来添加任何属性,即使没有子类化:

# handle_click will be called with button and can access button.url
button.url = url
button.connect('clicked', handle_click)