Skip to content

GObject.Object

class

The base object type.

GObject is the fundamental type providing the common attributes and methods for all object types in GTK, Pango and other libraries based on GObject. The GObject class provides methods for object construction and destruction, property access methods, and signal support. Signals are described in detail here.

For a tutorial on implementing a new GObject class, see How to define and implement a new GObject. For a list of naming conventions for GObjects and their methods, see the GType conventions. For the high-level concepts behind GObject, read Instantiatable classed types: Objects.

Since GLib 2.72, all GObjects are guaranteed to be aligned to at least the alignment of the largest basic GLib type (typically this is guint64 or gdouble). If you need larger alignment for an element in a GObject, you should allocate it on the heap (aligned), or arrange for your GObject to be appropriately padded. This guarantee applies to the GObject (or derived) struct, the GObjectClass (or derived) struct, and any private data allocated by G_ADD_PRIVATE().

Constructors

newv

@classmethod
def newv(cls, object_type: type | Type, parameters: list[Parameter]) -> Object

:::warning Deprecated since 2.54 This API is deprecated. :::

Creates a new instance of a Object subtype and sets its properties.

Construction parameters (see ParamFlags.CONSTRUCT, ParamFlags.CONSTRUCT_ONLY) which are not explicitly specified are set to their default values.

Parameters:

  • object_type — the type id of the Object subtype to instantiate
  • parameters — an array of Parameter

Methods

bind_property

def bind_property(self, source_property: str, target: Object, target_property: str, flags: BindingFlags | int) -> Binding

Creates a binding between source_property on source and target_property on target.

Whenever the source_property is changed the target_property is updated using the same value. For instance:

g_object_bind_property (action, "active", widget, "sensitive", 0);

Will result in the "sensitive" property of the widget Object instance to be updated with the same value of the "active" property of the action Object instance.

If flags contains BindingFlags.BIDIRECTIONAL then the binding will be mutual: if target_property on target changes then the source_property on source will be updated as well.

The binding will automatically be removed when either the source or the target instances are finalized. To remove the binding without affecting the source and the target you can just call Object.unref on the returned Binding instance.

Removing the binding by calling Object.unref on it must only be done if the binding, source and target are only used from a single thread and it is clear that both source and target outlive the binding. Especially it is not safe to rely on this if the binding, source or target can be finalized from different threads. Keep another reference to the binding and use Binding.unbind instead to be on the safe side.

A Object can have multiple bindings.

Parameters:

  • source_property — the property on source to bind
  • target — the target Object
  • target_property — the property on target to bind
  • flags — flags to pass to Binding

bind_property_full

def bind_property_full(self, source_property: str, target: Object, target_property: str, flags: BindingFlags | int, transform_to: BindingTransformFunc | None = ..., transform_from: BindingTransformFunc | None = ...) -> Binding

Complete version of Object.bind_property.

Creates a binding between source_property on source and target_property on target, allowing you to set the transformation functions to be used by the binding.

If flags contains BindingFlags.BIDIRECTIONAL then the binding will be mutual: if target_property on target changes then the source_property on source will be updated as well. The transform_from function is only used in case of bidirectional bindings, otherwise it will be ignored

The binding will automatically be removed when either the source or the target instances are finalized. This will release the reference that is being held on the Binding instance; if you want to hold on to the Binding instance, you will need to hold a reference to it.

To remove the binding, call Binding.unbind.

A Object can have multiple bindings.

The same user_data parameter will be used for both transform_to and transform_from transformation functions; the notify function will be called once, when the binding is removed. If you need different data for each transformation function, please use Object.bind_property_with_closures instead.

Parameters:

  • source_property — the property on source to bind
  • target — the target Object
  • target_property — the property on target to bind
  • flags — flags to pass to Binding
  • transform_to — the transformation function from the source to the target, or None to use the default
  • transform_from — the transformation function from the target to the source, or None to use the default

bind_property_with_closures

def bind_property_with_closures(self, source_property: str, target: Object, target_property: str, flags: BindingFlags | int, transform_to: Closure, transform_from: Closure) -> Binding

Creates a binding between source_property on source and target_property on target, allowing you to set the transformation functions to be used by the binding.

This function is the language bindings friendly version of Object.bind_property_full, using GClosures instead of function pointers.

Parameters:

  • source_property — the property on source to bind
  • target — the target Object
  • target_property — the property on target to bind
  • flags — flags to pass to Binding
  • transform_to — a Closure wrapping the transformation function from the source to the target, or None to use the default
  • transform_from — a Closure wrapping the transformation function from the target to the source, or None to use the default

force_floating

def force_floating(self) -> None

This function is intended for Object implementations to re-enforce a floating object reference. Doing this is seldom required: all GInitiallyUnowneds are created with a floating reference which usually just needs to be sunken by calling Object.ref_sink.

freeze_notify

def freeze_notify(self) -> None

Increases the freeze count on object. If the freeze count is non-zero, the emission of "notify" signals on object is stopped. The signals are queued until the freeze count is decreased to zero. Duplicate notifications are squashed so that at most one Object::notify signal is emitted for each property modified while the object is frozen.

This is necessary for accessors that modify multiple properties to prevent premature notification while the object is still being modified.

get_data

def get_data(self, key: str) -> int | None

Gets a named field from the objects table of associations (see Object.set_data).

Parameters:

  • key — name of the key for that association

get_property

def get_property(self, property_name: str, value: Value) -> None

Gets a property of an object.

The value can be:

  • an empty Value initialized by G_VALUE_INIT, which will be automatically initialized with the expected type of the property (since GLib 2.60)
  • a Value initialized with the expected type of the property
  • a Value initialized with a type to which the expected type of the property can be transformed

In general, a copy is made of the property contents and the caller is responsible for freeing the memory by calling Value.unset.

Note that Object.get_property is really intended for language bindings, g_object_get() is much more convenient for C programming.

Parameters:

  • property_name — the name of the property to get
  • value — return location for the property value

get_qdata

def get_qdata(self, quark: GLib.Quark) -> int | None

This function gets back user data pointers stored via g_object_set_qdata().

Parameters:

  • quark — A GQuark, naming the user data pointer

getv

def getv(self, names: list[str], values: list[Value]) -> None

Gets n_properties properties for an object. Obtained properties will be set to values. All properties must be valid. Warnings will be emitted and undefined behaviour may result if invalid properties are passed in.

Parameters:

  • names — the names of each property to get
  • values — the values of each property to get

is_floating

def is_floating(self) -> bool

Checks whether object has a floating reference.

notify

def notify(self, property_name: str) -> None

Emits a "notify" signal for the property property_name on object.

When possible, eg. when signaling a property change from within the class that registered the property, you should use Object.notify_by_pspec instead.

Note that emission of the notify signal may be blocked with Object.freeze_notify. In this case, the signal emissions are queued and will be emitted (in reverse order) when Object.thaw_notify is called.

Parameters:

  • property_name — the name of a property installed on the class of object.

notify_by_pspec

def notify_by_pspec(self, pspec: ParamSpec) -> None

Emits a "notify" signal for the property specified by pspec on object.

This function omits the property name lookup, hence it is faster than Object.notify.

One way to avoid using Object.notify from within the class that registered the properties, and using Object.notify_by_pspec instead, is to store the GParamSpec used with ObjectClass.install_property inside a static array, e.g.:

typedef enum
  {
    PROP_FOO = 1,
    PROP_LAST
  } MyObjectProperty;

  static GParamSpec *properties[PROP_LAST];

  static void
  my_object_class_init (MyObjectClass *klass)
  {
    properties[PROP_FOO] = g_param_spec_int ("foo", NULL, NULL,
                                             0, 100,
                                             50,
                                             G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    g_object_class_install_property (gobject_class,
                                     PROP_FOO,
                                     properties[PROP_FOO]);
  }

and then notify a change on the "foo" property with:

g_object_notify_by_pspec (self, properties[PROP_FOO]);

Parameters:

  • pspec — the ParamSpec of a property installed on the class of object.

ref

def ref(self) -> Object

Increases the reference count of object.

Since GLib 2.56, if GLIB_VERSION_MAX_ALLOWED is 2.56 or greater, the type of object will be propagated to the return type (using the GCC typeof() extension), so any casting the caller needs to do on the return type must be explicit.

ref_sink

def ref_sink(self) -> Object

Increase the reference count of object, and possibly remove the floating reference, if object has a floating reference.

In other words, if the object is floating, then this call "assumes ownership" of the floating reference, converting it to a normal reference by clearing the floating flag while leaving the reference count unchanged. If the object is not floating, then this call adds a new normal reference increasing the reference count by one.

Since GLib 2.56, the type of object will be propagated to the return type under the same conditions as for Object.ref.

run_dispose

def run_dispose(self) -> None

Releases all references to other objects. This can be used to break reference cycles.

This function should only be called from object system implementations.

set_data

def set_data(self, key: str, data: int | None = ...) -> None

Each object carries around a table of associations from strings to pointers. This function lets you set an association.

If the object already had an association with that name, the old association will be destroyed.

Internally, the key is converted to a GQuark using GLib.quark_from_string. This means a copy of key is kept permanently (even after object has been finalized) — so it is recommended to only use a small, bounded set of values for key in your program, to avoid the GQuark storage growing unbounded.

Parameters:

  • key — name of the key
  • data — data to associate with that key

set_property

def set_property(self, property_name: str, value: Value) -> None

Sets a property on an object.

Parameters:

  • property_name — the name of the property to set
  • value — the value

steal_data

def steal_data(self, key: str) -> int | None

Remove a specified datum from the object's data associations, without invoking the association's destroy handler.

Parameters:

  • key — name of the key

steal_qdata

def steal_qdata(self, quark: GLib.Quark) -> int | None

This function gets back user data pointers stored via g_object_set_qdata() and removes the data from object without invoking its destroy() function (if any was set). Usually, calling this function is only required to update user data pointers with a destroy notifier, for example:

void
object_add_to_user_list (GObject     *object,
                         const gchar *new_string)
{
  // the quark, naming the object data
  GQuark quark_string_list = g_quark_from_static_string ("my-string-list");
  // retrieve the old string list
  GList *list = g_object_steal_qdata (object, quark_string_list);

  // prepend new string
  list = g_list_prepend (list, g_strdup (new_string));
  // this changed 'list', so we need to set it again
  g_object_set_qdata_full (object, quark_string_list, list, free_string_list);
}
static void
free_string_list (gpointer data)
{
  GList *node, *list = data;

  for (node = list; node; node = node->next)
    g_free (node->data);
  g_list_free (list);
}

Using Object.get_qdata in the above example, instead of Object.steal_qdata would have left the destroy function set, and thus the partial string list would have been freed upon g_object_set_qdata_full().

Parameters:

  • quark — A GQuark, naming the user data pointer

thaw_notify

def thaw_notify(self) -> None

Reverts the effect of a previous call to Object.freeze_notify. The freeze count is decreased on object and when it reaches zero, queued "notify" signals are emitted.

Duplicate notifications for each property are squashed so that at most one Object::notify signal is emitted for each property, in the reverse order in which they have been queued.

It is an error to call this function when the freeze count is zero.

unref

def unref(self) -> None

Decreases the reference count of object. When its reference count drops to 0, the object is finalized (i.e. its memory is freed).

If the pointer to the Object may be reused in future (for example, if it is an instance variable of another object), it is recommended to clear the pointer to None rather than retain a dangling pointer to a potentially invalid Object instance. Use g_clear_object() for this.

watch_closure

def watch_closure(self, closure: Closure) -> None

This function essentially limits the life time of the closure to the life time of the object. That is, when the object is finalized, the closure is invalidated by calling Closure.invalidate on it, in order to prevent invocations of the closure with a finalized (nonexisting) object. Also, Object.ref and Object.unref are added as marshal guards to the closure, to ensure that an extra reference count is held on object during invocation of the closure. Usually, this function will be called on closures that use this object as closure data.

Parameters:

Static functions

compat_control

@staticmethod
def compat_control(what: int, data: int | None = ...) -> int

interface_find_property

@staticmethod
def interface_find_property(g_iface: TypeInterface, property_name: str) -> ParamSpec

Find the ParamSpec with the given name for an interface. Generally, the interface vtable passed in as g_iface will be the default vtable from type_default_interface_ref, or, if you know the interface has already been loaded, type_default_interface_peek.

Parameters:

  • g_iface — any interface vtable for the interface, or the default vtable for the interface
  • property_name — name of a property to look up.

interface_install_property

@staticmethod
def interface_install_property(g_iface: TypeInterface, pspec: ParamSpec) -> None

Add a property to an interface; this is only useful for interfaces that are added to GObject-derived types. Adding a property to an interface forces all objects classes with that interface to have a compatible property. The compatible property could be a newly created ParamSpec, but normally ObjectClass.override_property will be used so that the object class only needs to provide an implementation and inherits the property description, default value, bounds, and so forth from the interface property.

This function is meant to be called from the interface's default vtable initialization function (the class_init member of TypeInfo.) It must not be called after after class_init has been called for any object types implementing this interface.

If pspec is a floating reference, it will be consumed.

Parameters:

  • g_iface — any interface vtable for the interface, or the default vtable for the interface.
  • pspec — the ParamSpec for the new property

interface_list_properties

@staticmethod
def interface_list_properties(g_iface: TypeInterface) -> list[ParamSpec]

Lists the properties of an interface.Generally, the interface vtable passed in as g_iface will be the default vtable from type_default_interface_ref, or, if you know the interface has already been loaded, type_default_interface_peek.

Parameters:

  • g_iface — any interface vtable for the interface, or the default vtable for the interface

Virtual methods

do_constructed

def do_constructed(self) -> None

the constructed function is called by g_object_new() as the final step of the object creation process. At the point of the call, all construction properties have been set on the object. The purpose of this call is to allow for object initialisation steps that can only be performed after construction properties have been set. constructed implementors should chain up to the constructed call of their parent class to allow it to complete its initialisation.

do_dispatch_properties_changed

def do_dispatch_properties_changed(self, n_pspecs: int, pspecs: ParamSpec) -> None

emits property change notification for a bunch of properties. Overriding dispatch_properties_changed should be rarely needed.

do_dispose

def do_dispose(self) -> None

the dispose function is supposed to drop all references to other objects, but keep the instance otherwise intact, so that client method invocations still work. It may be run multiple times (due to reference loops). Before returning, dispose should chain up to the dispose method of the parent class.

do_finalize

def do_finalize(self) -> None

instance finalization function, should finish the finalization of the instance begun in dispose and chain up to the finalize method of the parent class.

do_get_property

def do_get_property(self, property_id: int, value: Value, pspec: ParamSpec) -> None

the generic getter for all properties of this type. Should be overridden for every type with properties.

do_notify

def do_notify(self, pspec: ParamSpec) -> None

Emits a "notify" signal for the property property_name on object.

When possible, eg. when signaling a property change from within the class that registered the property, you should use Object.notify_by_pspec instead.

Note that emission of the notify signal may be blocked with Object.freeze_notify. In this case, the signal emissions are queued and will be emitted (in reverse order) when Object.thaw_notify is called.

do_set_property

def do_set_property(self, property_id: int, value: Value, pspec: ParamSpec) -> None

the generic setter for all properties of this type. Should be overridden for every type with properties. If implementations of set_property don't emit property change notification explicitly, this will be done implicitly by the type system. However, if the notify signal is emitted explicitly, the type system will not emit it a second time.

Signals

notify

def on_notify(self, pspec: ParamSpec) -> None: ...

The notify signal is emitted on an object when one of its properties has its value set through Object.set_property, g_object_set(), et al.

Note that getting this signal doesn’t itself guarantee that the value of the property has actually changed. When it is emitted is determined by the derived GObject class. If the implementor did not create the property with ParamFlags.EXPLICIT_NOTIFY, then any call to Object.set_property results in ::notify being emitted, even if the new value is the same as the old. If they did pass ParamFlags.EXPLICIT_NOTIFY, then this signal is emitted only when they explicitly call Object.notify or Object.notify_by_pspec, and common practice is to do that only when the value has actually changed.

This signal is typically used to obtain change notification for a single property, by specifying the property name as a detail in the g_signal_connect() call, like this:

g_signal_connect (text_view->buffer, "notify::paste-target-list",
                  G_CALLBACK (gtk_text_view_target_list_notify),
                  text_view)

It is important to note that you must use [canonical parameter names][classGObject.ParamSpec#parameter-names] as detail strings for the notify signal.