Python GTK3:如何使用gtk_uuu*\u new_u*()函数

2024-05-14 03:46:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

是否可以直接使用这些函数?你知道吗


Tags: text程序viewgtknewforbufferwith
2条回答

我想出来了。你知道吗

显然,你可以使用以下方法:

view = Gtk.TextView.new_with_buffer(buffer)

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

太长了,读不下去了,请使用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,因为:

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

相关问题 更多 >