在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)
是否可以直接使用此类功能?
答案 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,因为: