Enable or disable an action installed with gtk.widget_class.WidgetClass.installAction.
For widgets that can be “activated” (buttons, menu items, etc.), this function activates them.
Looks up the action in the action groups associated with widget and its ancestors, and activates it.
Activates the default.activate action from widget.
Adds controller to widget so that it will receive events.
Adds a style class to widget.
Adds a widget to the list of mnemonic labels for this widget.
Queues an animation frame update and adds a callback to be called before each frame.
This function is only used by gtk.widget.Widget subclasses, to assign a size, position and (optionally) baseline to their child widgets.
Called by widgets as the user moves around the window using keyboard shortcuts.
Computes the bounds for widget in the coordinate space of target.
Computes whether a container should give this widget extra space when possible.
Translates the given point in widget's coordinates to coordinates relative to target’s coordinate system.
Computes a matrix suitable to describe a transformation from widget's coordinate system into target's coordinate system.
Connect to Destroy signal.
Connect to DirectionChanged signal.
Connect to Hide signal.
Connect to KeynavFailed signal.
Connect to Map signal.
Connect to MnemonicActivate signal.
Connect to MoveFocus signal.
Connect to QueryTooltip signal.
Connect to Realize signal.
Connect to Show signal.
Connect to StateFlagsChanged signal.
Connect to Unmap signal.
Connect to Unrealize signal.
Tests if the point at (x, y) is contained in widget.
Creates a new pango.context.Context with the appropriate font map, font options, font description, and base direction for drawing text for this widget.
Creates a new pango.layout.Layout with the appropriate font map, font description, and base direction for drawing text for this widget.
Clears the template children for the given widget.
Checks to see if a drag movement has passed the GTK drag threshold.
Notifies the user about an input-related error on this widget.
Returns the baseline that has currently been allocated to widget.
Returns the height that has currently been allocated to widget.
Returns the width that has currently been allocated to widget.
Gets the first ancestor of widget with type widget_type.
Returns the baseline that has currently been allocated to widget.
Determines whether the input focus can enter widget or any of its children.
Queries whether widget can be the target of pointer events.
Gets the value set with gtk.widget.Widget.setChildVisible.
Gets the clipboard object for widget.
Gets the current foreground color for the widget’s CSS style.
Returns the list of style classes applied to widget.
Returns the CSS name that is used for self.
Queries the cursor set on widget.
Gets the reading direction for a particular widget.
Get the gdk.display.Display for the toplevel window associated with this widget.
Returns the widget’s first child.
Returns the current focus child of widget.
Returns whether the widget should grab focus when it is clicked with the mouse.
Determines whether widget can own the input focus.
Gets the font map of widget.
Returns the cairo.font_options.FontOptions of widget.
Obtains the frame clock for a widget.
Gets the horizontal alignment of widget.
Returns the current value of the has-tooltip property.
Returns the content height of the widget.
Gets whether the widget would like any available extra horizontal space.
Gets whether gtk.widget.Widget.setHexpand has been used to explicitly set the expand flag on this widget.
Returns the widget’s last child.
Retrieves the layout manager used by widget.
Whether the widget is mapped.
Gets the bottom margin of widget.
Gets the end margin of widget.
Gets the start margin of widget.
Gets the top margin of widget.
Retrieves the name of a widget.
Returns the nearest gtk.native.Native ancestor of widget.
Returns the widget’s next sibling.
#Fetches the requested opacity for this widget.
Returns the widget’s overflow value.
Gets a pango.context.Context with the appropriate font map, font description, and base direction for this widget.
Returns the parent widget of widget.
Retrieves the minimum and natural size of a widget, taking into account the widget’s preference for height-for-width management.
Returns the widget’s previous sibling.
Gets the primary clipboard of widget.
Determines whether widget is realized.
Determines whether widget is always treated as the default widget within its toplevel when it has the focus, even if another widget is the default.
Gets whether the widget prefers a height-for-width layout or a width-for-height layout.
Returns the gtk.root.Root widget of widget.
Retrieves the internal scale factor that maps from window coordinates to the actual device pixels.
Returns the widget’s sensitivity.
Gets the settings object holding the settings used for this widget.
Returns the content width or height of the widget.
Gets the size request that was explicitly set for the widget using gtk.widget.Widget.setSizeRequest.
Returns the widget state as a flag set.
Returns the style context associated to widget.
Fetch an object build from the template XML for widget_type in this widget instance.
Gets the contents of the tooltip for widget.
Gets the contents of the tooltip for widget.
Gets the vertical alignment of widget.
Gets whether the widget would like any available extra vertical space.
Gets whether gtk.widget.Widget.setVexpand has been used to explicitly set the expand flag on this widget.
Determines whether the widget is visible.
Returns the content width of the widget.
Causes widget to have the keyboard focus for the gtk.window.Window it's inside.
Returns whether css_class is currently applied to widget.
Determines whether widget is the current default widget within its toplevel.
Determines if the widget has the global input focus.
Determines if the widget should show a visible indication that it has the global input focus.
Reverses the effects of gtk.widget.Widget.show.
Returns whether the widget is currently being destroyed.
Creates and initializes child widgets defined in templates.
Inserts group into widget.
Inserts widget into the child widget list of parent.
Inserts widget into the child widget list of parent.
Determines whether widget is somewhere inside ancestor, possibly with intermediate containers.
Determines whether widget can be drawn to.
Determines if the widget is the focus widget within its toplevel.
Returns the widget’s effective sensitivity.
Determines whether the widget and all its parents are marked as visible.
Emits the ::keynav-failed signal on the widget.
Returns the widgets for which this widget is the target of a mnemonic.
Causes a widget to be mapped if it isn’t already.
Measures widget in the orientation orientation and for the given for_size.
Emits the ::mnemonic-activate signal.
Returns a gio.list_model.ListModel to track the children of widget.
Returns a gio.list_model.ListModel to track the gtk.event_controller.EventControllers of widget.
Finds the descendant of widget closest to the point (x, y).
Flags the widget for a rerun of the vfuncGtk.Widget.size_allocate function.
Schedules this widget to be redrawn in the paint phase of the current or the next frame.
Flags a widget to have its size renegotiated.
Creates the GDK resources associated with a widget.
Removes controller from widget, so that it doesn't process events anymore.
Removes a style from widget.
Removes a widget from the list of mnemonic labels for this widget.
Removes a tick callback previously registered with gtk.widget.Widget.addTickCallback.
Specifies whether the input focus can enter the widget or any of its children.
Sets whether widget can be the target of pointer events.
Sets whether widget should be mapped along with its parent.
Clear all style classes applied to widget and replace them with classes.
Sets the cursor to be shown when pointer devices point towards widget.
Sets a named cursor to be shown when pointer devices point towards widget.
Sets the reading direction on a particular widget.
Set child as the current focus child of widget.
Sets whether the widget should grab focus when it is clicked with the mouse.
Specifies whether widget can own the input focus.
Sets the font map to use for Pango rendering.
Sets the cairo.font_options.FontOptions used for Pango rendering in this widget.
Sets the horizontal alignment of widget.
Sets the has-tooltip property on widget to has_tooltip.
Sets whether the widget would like any available extra horizontal space.
Sets whether the hexpand flag will be used.
Sets the layout manager delegate instance that provides an implementation for measuring and allocating the children of widget.
Sets the bottom margin of widget.
Sets the end margin of widget.
Sets the start margin of widget.
Sets the top margin of widget.
Sets a widgets name.
Request the widget to be rendered partially transparent.
Sets how widget treats content that is drawn outside the widget's content area.
Sets parent as the parent widget of widget.
Specifies whether widget will be treated as the default widget within its toplevel when it has the focus, even if another widget is the default.
Sets the sensitivity of a widget.
Sets the minimum size of a widget.
Turns on flag values in the current widget state.
Sets markup as the contents of the tooltip, which is marked up with Pango markup.
Sets text as the contents of the tooltip.
Sets the vertical alignment of widget.
Sets whether the widget would like any available extra vertical space.
Sets whether the vexpand flag will be used.
Sets the visibility state of widget.
Returns whether widget should contribute to the measuring and allocation of its parent.
Flags a widget to be displayed.
Snapshot the a child of widget.
Translate coordinates relative to src_widget’s allocation to coordinates relative to dest_widget’s allocations.
Triggers a tooltip query on the display where the toplevel of widget is located.
Causes a widget to be unmapped if it’s currently mapped.
Dissociate widget from its parent.
Causes a widget to be unrealized (frees all GDK resources associated with the widget).
Turns off flag values for the current widget state.
Obtains the current default reading direction.
Sets the default reading direction for widgets.
Requests the user's screen reader to announce the given message.
Retrieves the accessible parent for an accessible object.
Retrieves the accessible role of an accessible object.
Retrieves the accessible implementation for the given gtk.accessible.Accessible.
Queries the coordinates and dimensions of this accessible
Retrieves the first accessible child of an accessible object.
Retrieves the next accessible sibling of an accessible object
Query a platform state, such as focus.
Resets the accessible property to its default value.
Resets the accessible relation to its default value.
Resets the accessible state to its default value.
Sets the parent and sibling of an accessible object.
Updates the next accessible sibling of self.
Updates an array of accessible properties.
Updates an array of accessible relations.
Updates an array of accessible states.
Gets the ID of the buildable object.
Requests the user's screen reader to announce the given message.
Retrieves the accessible parent for an accessible object.
Retrieves the accessible role of an accessible object.
Retrieves the accessible implementation for the given gtk.accessible.Accessible.
Queries the coordinates and dimensions of this accessible
Retrieves the first accessible child of an accessible object.
Retrieves the next accessible sibling of an accessible object
Query a platform state, such as focus.
Resets the accessible property to its default value.
Resets the accessible relation to its default value.
Resets the accessible state to its default value.
Sets the parent and sibling of an accessible object.
Updates the next accessible sibling of self.
Updates an array of accessible properties.
Updates an array of accessible relations.
Updates an array of accessible states.
Gets the ID of the buildable object.
The base class for all widgets.
gtk.widget.Widget is the base class all widgets in GTK derive from. It manages the widget lifecycle, layout, states and style.
Height-for-width Geometry Management
GTK uses a height-for-width (and width-for-height) geometry management system. Height-for-width means that a widget can change how much vertical space it needs, depending on the amount of horizontal space that it is given (and similar for width-for-height). The most common example is a label that reflows to fill up the available width, wraps to fewer lines, and therefore needs less height.
Height-for-width geometry management is implemented in GTK by way of two virtual methods:
There are some important things to keep in mind when implementing height-for-width and when using it in widget implementations.
If you implement a direct gtk.widget.Widget subclass that supports height-for-width or width-for-height geometry management for itself or its child widgets, the vfunc@Gtk.Widget.get_request_mode virtual function must be implemented as well and return the widget's preferred request mode. The default implementation of this virtual function returns gtk.types.SizeRequestMode.ConstantSize, which means that the widget will only ever get -1 passed as the for_size value to its vfunc@Gtk.Widget.measure implementation.
The geometry management system will query a widget hierarchy in only one orientation at a time. When widgets are initially queried for their minimum sizes it is generally done in two initial passes in the gtk.types.SizeRequestMode chosen by the toplevel.
For example, when queried in the normal gtk.types.SizeRequestMode.HeightForWidth mode:
First, the default minimum and natural width for each widget in the interface will be computed using gtk.widget.Widget.measure with an orientation of gtk.types.Orientation.Horizontal and a for_size of -1. Because the preferred widths for each widget depend on the preferred widths of their children, this information propagates up the hierarchy, and finally a minimum and natural width is determined for the entire toplevel. Next, the toplevel will use the minimum width to query for the minimum height contextual to that width using gtk.widget.Widget.measure with an orientation of gtk.types.Orientation.Vertical and a for_size of the just computed width. This will also be a highly recursive operation. The minimum height for the minimum width is normally used to set the minimum size constraint on the toplevel.
After the toplevel window has initially requested its size in both dimensions it can go on to allocate itself a reasonable size (or a size previously specified with gtk.window.Window.setDefaultSize). During the recursive allocation process it’s important to note that request cycles will be recursively executed while widgets allocate their children. Each widget, once allocated a size, will go on to first share the space in one orientation among its children and then request each child's height for its target allocated width or its width for allocated height, depending. In this way a gtk.widget.Widget will typically be requested its size a number of times before actually being allocated a size. The size a widget is finally allocated can of course differ from the size it has requested. For this reason, gtk.widget.Widget caches a small number of results to avoid re-querying for the same sizes in one allocation cycle.
If a widget does move content around to intelligently use up the allocated size then it must support the request in both gtk.types.SizeRequestModes even if the widget in question only trades sizes in a single orientation.
For instance, a gtk.label.Label that does height-for-width word wrapping will not expect to have vfunc@Gtk.Widget.measure with an orientation of gtk.types.Orientation.Vertical called because that call is specific to a width-for-height request. In this case the label must return the height required for its own minimum possible width. By following this rule any widget that handles height-for-width or width-for-height requests will always be allocated at least enough space to fit its own content.
Here are some examples of how a gtk.types.SizeRequestMode.HeightForWidth widget generally deals with width-for-height requests:
Often a widget needs to get its own request during size request or allocation. For example, when computing height it may need to also compute width. Or when deciding how to use an allocation, the widget may need to know its natural size. In these cases, the widget should be careful to call its virtual methods directly, like in the code example above.
It will not work to use the wrapper function gtk.widget.Widget.measure inside your own vfunc@Gtk.Widget.size_allocate implementation. These return a request adjusted by gtk.size_group.SizeGroup, the widget's align and expand flags, as well as its CSS style.
If a widget used the wrappers inside its virtual method implementations, then the adjustments (such as widget margins) would be applied twice. GTK therefore does not allow this and will warn if you try to do it.
Of course if you are getting the size request for another widget, such as a child widget, you must use gtk.widget.Widget.measure; otherwise, you would not properly consider widget margins, gtk.size_group.SizeGroup, and so forth.
GTK also supports baseline vertical alignment of widgets. This means that widgets are positioned such that the typographical baseline of widgets in the same row are aligned. This happens if a widget supports baselines, has a vertical alignment using baselines, and is inside a widget that supports baselines and has a natural “row” that it aligns to the baseline, or a baseline assigned to it by the grandparent.
Baseline alignment support for a widget is also done by the vfunc@Gtk.Widget.measure virtual function. It allows you to report both a minimum and natural size.
If a widget ends up baseline aligned it will be allocated all the space in the parent as if it was gtk.types.Align.Fill, but the selected baseline can be found via gtk.widget.Widget.getBaseline. If the baseline has a value other than -1 you need to align the widget such that the baseline appears at the position.
GtkWidget as GtkBuildable
The gtk.widget.Widget implementation of the gtk.buildable.Buildable interface supports various custom elements to specify additional aspects of widgets that are not directly expressed as properties.
If the widget uses a gtk.layout_manager.LayoutManager, gtk.widget.Widget supports a custom <layout> element, used to define layout properties:
gtk.widget.Widget allows style information such as style classes to be associated with widgets, using the custom <style> element:
gtk.widget.Widget allows defining accessibility information, such as properties, relations, and states, using the custom <accessibility> element:
Building composite widgets from template XML
GtkWidget exposes some facilities to automate the procedure of creating composite widgets using "templates".
To create composite widgets with gtk.builder.Builder XML, one must associate the interface description with the widget class at class initialization time using gtk.widget_class.WidgetClass.setTemplate.
The interface description semantics expected in composite template descriptions is slightly different from regular gtk.builder.Builder XML.
Unlike regular interface descriptions, gtk.widget_class.WidgetClass.setTemplate will expect a <template> tag as a direct child of the toplevel <interface> tag. The <template> tag must specify the “class” attribute which must be the type name of the widget. Optionally, the “parent” attribute may be specified to specify the direct parent type of the widget type; this is ignored by gtk.builder.Builder but can be used by UI design tools to introspect what kind of properties and internal children exist for a given type when the actual type does not exist.
The XML which is contained inside the <template> tag behaves as if it were added to the <object> tag defining the widget itself. You may set properties on a widget by inserting <property> tags into the <template> tag, and also add <child> tags to add children and extend a widget in the normal way you would with <object> tags.
Additionally, <object> tags can also be added before and after the initial <template> tag in the normal way, allowing one to define auxiliary objects which might be referenced by other widgets declared as children of the <template> tag.
Since, unlike the <object> tag, the <template> tag does not contain an “id” attribute, if you need to refer to the instance of the object itself that the template will create, simply refer to the template class name in an applicable element content.
Here is an example of a template definition, which includes an example of this in the <signal> tag:
Typically, you'll place the template fragment into a file that is bundled with your project, using gio.resource.Resource. In order to load the template, you need to call gtk.widget_class.WidgetClass.setTemplateFromResource from the class initialization of your gtk.widget.Widget type:
You will also need to call gtk.widget.Widget.initTemplate from the instance initialization function:
as well as calling gtk.widget.Widget.disposeTemplate from the dispose function:
You can access widgets defined in the template using the gtk.widget.Widget.getTemplateChild function, but you will typically declare a pointer in the instance private data structure of your type using the same name as the widget in the template definition, and call gtk.widget_class.WidgetClass.bindTemplateChildFull (or one of its wrapper macros func@Gtk.widget_class_bind_template_child and func@Gtk.widget_class_bind_template_child_private) with that name, e.g.
You can also use gtk.widget_class.WidgetClass.bindTemplateCallbackFull (or is wrapper macro func@Gtk.widget_class_bind_template_callback) to connect a signal callback defined in the template with a function visible in the scope of the class, e.g.