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¶
:::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:
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:
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 onsourceto bindtarget— the targetObjecttarget_property— the property ontargetto bindflags— flags to pass toBinding
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 onsourceto bindtarget— the targetObjecttarget_property— the property ontargetto bindflags— flags to pass toBindingtransform_to— the transformation function from thesourceto thetarget, orNoneto use the defaulttransform_from— the transformation function from thetargetto thesource, orNoneto 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 onsourceto bindtarget— the targetObjecttarget_property— the property ontargetto bindflags— flags to pass toBindingtransform_to— aClosurewrapping the transformation function from thesourceto thetarget, orNoneto use the defaulttransform_from— aClosurewrapping the transformation function from thetargetto thesource, orNoneto use the default
force_floating¶
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¶
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¶
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¶
Gets a property of an object.
The value can be:
- an empty
Valueinitialized byG_VALUE_INIT, which will be automatically initialized with the expected type of the property (since GLib 2.60) - a
Valueinitialized with the expected type of the property - a
Valueinitialized 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 getvalue— return location for the property value
get_qdata¶
This function gets back user data pointers stored via g_object_set_qdata().
Parameters:
quark— AGQuark, naming the user data pointer
getv¶
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 getvalues— the values of each property to get
is_floating¶
Checks whether object has a floating reference.
notify¶
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 ofobject.
notify_by_pspec¶
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:
Parameters:
pspec— theParamSpecof a property installed on the class ofobject.
ref¶
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¶
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¶
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¶
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 keydata— data to associate with that key
set_property¶
Sets a property on an object.
Parameters:
property_name— the name of the property to setvalue— the value
steal_data¶
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¶
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— AGQuark, naming the user data pointer
thaw_notify¶
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¶
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¶
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:
closure—Closureto watch
Static functions¶
compat_control¶
interface_find_property¶
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 interfaceproperty_name— name of a property to look up.
interface_install_property¶
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— theParamSpecfor the new property
interface_list_properties¶
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¶
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¶
emits property change notification for a bunch
of properties. Overriding dispatch_properties_changed should be rarely
needed.
do_dispose¶
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¶
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¶
the generic getter for all properties of this type. Should be overridden for every type with properties.
do_notify¶
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¶
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¶
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.