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

Python 在小部件中存储自定义信息,gobject introspect,python,gtk,gobject-introspection,Python,Gtk,Gobject Introspection,有没有办法用小部件存储自定义信息 例如,假设我有一个包含20个URL的列表 我创建了20个按钮,每个url一个 我想这样当我点击一个按钮时,一个url就会打开。但是我需要一种方法来知道哪个按钮链接到哪个url,所以当按钮被点击时,我可以将url传递给事件处理函数来打开它 我想到的另一个解决方案是创建一个扩展Gtk.Button类的自定义类,如下所示 class MyButton(Gtk.Button) def __init__(self, url): Gtk.Button

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

例如,假设我有一个包含20个URL的列表

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

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

我想到的另一个解决方案是创建一个扩展Gtk.Button类的自定义类,如下所示

class MyButton(Gtk.Button)
    def __init__(self, url):
        Gtk.Button.__init__(self)
        self.url = url
        ...
然后我就可以简单地做button=MyButton(url)


但这似乎有点过分了。因此,我想知道是否可以在小部件本身上存储自定义信息。

最简单的解决方案是将URL作为附加数据添加到
单击的信号处理程序:

# 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)

+1.但我想说第二个建议比第一个建议更简单;我稍微喜欢第一种选择。还有
按钮。connect('clicked',lambda按钮:handle_click(url))
,但那个按钮很容易,所以我省略了它。