TL; др: Используйте Python конструктор нормальную форму, чтобы установить строительные свойства вместо удобства C API.
Различные конструкторы _new
в API C, включая базовые _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);
т.е. таким образом, чтобы установить (конструктор-только) свойство "недавно-менеджер".
Связи Python не вызывают API C для построения объектов; конструктор Python нормальная форма, например .:
button = Gtk.Button()
является эквивалентом вызова g_object_new(GTK_TYPE_BUTTON, NULL)
. Конструктор нормальная форма принимает аргументы, в виде словаря имен свойств и значений:
button = Gtk.Button(label='Hello, world')
Это эквивалентно вызову gtk_button_new_with_label()
в C. Python привязок слоя будет предоставлять всю необходимую безопасность типа во время выполнения ,
Это, как правило, рекомендуется использовать этот подход, и не вызова API C, потому что:
- это больше вещий, как это следует условность языка
- это более гибким, поскольку он позволяет вы установили больше свойств, не требуя дополнительных C API
Это было превосходное описание конструкторов в привязках. Между тем, я открываю следующий связанный вопрос. Как вы думаете, вы можете помочь? http://stackoverflow.com/questions/38171196/python-gtk3-how-to-create-a-gtk-filechoosedialog –