Python GTK3:如何使用gtk _ * _ new _ *()函数

时间:2016-07-01 22:11:39

标签: python gtk3

在GTK3中,我如何使用gtk_*_new_*()构造函数?

例如,考虑:

GtkWidget * gtk_recent_chooser_menu_new_for_manager ()

我该如何使用它?

我正在尝试移植PyGTK2程序,而我可以通过以下方式解决gtk_text_view_new_with_buffer()之类的问题:

view = Gtk.TextView()
view.set_buffer(buffer)

是否可以直接使用此类功能?

2 个答案:

答案 0 :(得分:1)

我明白了。

显然你可以使用以下内容:

view = Gtk.TextView.new_with_buffer(buffer)

有趣的是,Gtk.TextView.new() == Gtk.TextView()

答案 1 :(得分:1)

tl; dr :使用Python构造函数普通表单来设置构造属性,而不是方便的C API。

C API中的各种_new构造函数,包括基本_new()构造函数,只是g_object_new()的包装器。像type_new_with_foo()这样的构造函数只是C开发人员的便利函数,可以在调用g_object_new()和属性设置时提供一些类型安全性;所以,例如,gtk_recent_chooser_menu_new()只是:

return g_object_new (GTK_TYPE_RECENT_CHOOSER_MENU, NULL);

gtk_recent_chooser_menu_new_for_manager()是:

return g_object_new (GTK_TYPE_RECENT_CHOOSER_MENU,
                     "recent-manager", manager,
                     NULL);

即。一种设置(仅限构造函数)“recent-manager”属性的方法。

Python绑定不会调用C API来构造对象; Python构造函数的常规形式,例如:

button = Gtk.Button()

相当于调用g_object_new(GTK_TYPE_BUTTON, NULL)。构造函数普通形式以属性名称和值的字典形式接受参数:

button = Gtk.Button(label='Hello, world')

这相当于在C中调用gtk_button_new_with_label() .Python绑定层将在运行时提供所有必要的类型安全性。

通常建议使用此方法,调用C API,因为:

  • 它更像Pythonic,因为它遵循语言的惯例
  • 它更灵活,因为它允许您设置更多属性而无需额外的C API