Text#
Superclasses: Widget, InitiallyUnowned, Object
Implemented Interfaces: Accessible, AccessibleText, Buildable, ConstraintTarget, Editable
A single-line text entry.
GtkText is the common implementation of single-line text editing
that is shared between Entry, PasswordEntry,
SpinButton, and other widgets. In all of these, a GtkText
instance is used as the delegate for the Editable implementation.
A large number of key bindings s supported by default. If the entered text is longer than the allocation of the widget, the widget will scroll so that the cursor position is visible.
When using an entry for passwords and other sensitive information,
it can be put into “password mode” using set_visibility.
In this mode, entered text is displayed using an “invisible” character.
By default, GTK picks the best invisible character that is available
in the current font, but it can be changed with
set_invisible_char.
If you want to add icons or progress display in an entry, look at
Entry. There are other alternatives for more specialized
use cases, such as SearchEntry.
If you need multi-line editable text, use TextView.
Shortcuts and Gestures#
GtkText supports the following keyboard shortcuts:
Shift+:kbd:
F10or Menu opens the context menu.Ctrl+:kbd:
Aor Ctrl+<kbd>wzxhzdk:0</kbd> selects all the text.Ctrl+:kbd:
Shift+:kbd:Aor Ctrl+<kbd>wzxhzdk:1</kbd> unselects all.Ctrl+:kbd:
Zundoes the last modification.Ctrl+:kbd:
Yor Ctrl+:kbd:Shift+:kbd:Zredoes the last undone modification.Ctrl+:kbd:
Shift+:kbd:Ttoggles the text direction.Clear clears the content.
Additionally, the following signals have default keybindings:
Actions#
GtkText defines a set of built-in actions:
clipboard.copycopies the contents to the clipboard.clipboard.cutcopies the contents to the clipboard and deletes it from the widget.clipboard.pasteinserts the contents of the clipboard into the widget.menu.popupopens the context menu.misc.insert-emojiopens the Emoji chooser.misc.toggle-visibilitytoggles theGtkText:visibility property.misc.toggle-directiontoggles the text direction.selection.deletedeletes the current selection.selection.select-allselects all of the widgets content.text.redoredoes the last change to the contents.text.undoundoes the last change to the contents.text.clearremoves all content.
CSS nodes#
text[.read-only]
├── placeholder
├── undershoot.left
├── undershoot.right
├── [selection]
├── [cursor-handle[.top]
├── [cursor-handle.bottom]
├── [block-cursor]
├── [cursor-handle[.top/.bottom][.insertion-cursor]]
╰── [window.popup]
GtkText has a main node with the name text. Depending on the properties
of the widget, the .read-only style class may appear.
When the entry has a selection, it adds a subnode with the name selection.
When the entry is in overwrite mode, it adds a subnode with the name
block-cursor that determines how the block cursor is drawn.
The CSS node for a context menu is added as a subnode with the name popup.
The undershoot nodes are used to draw the underflow indication when content
is scrolled out of view. These nodes get the .left or .right style class
added depending on where the indication is drawn.
When touch is used and touch selection handles are shown, they are using
CSS nodes with name cursor-handle. They get the .top or .bottom style
class depending on where they are shown in relation to the selection. If
there is just a single handle for the text cursor, it gets the style class
.insertion-cursor.
Accessibility#
GtkText uses the none role, which causes it to be
skipped for accessibility. This is because GtkText is expected to be used
as a delegate for a GtkEditable implementation that will be represented
to accessibility.
Constructors#
- class Text
-
- classmethod new_with_buffer(buffer: EntryBuffer) Widget#
Creates a new
GtkTextwith the specified buffer.- Parameters:
buffer – the buffer to use
Methods#
- class Text
- compute_cursor_extents(position: int) tuple[Rect, Rect]#
Determines the positions of the strong and weak cursors for a given character position.
The position of each cursor is stored as a zero-width rectangle. The strong cursor location is the location where characters of the directionality equal to the base direction are inserted. The weak cursor location is the location where characters of the directionality opposite to the base direction are inserted.
The rectangle positions are in widget coordinates.
Added in version 4.4.
- Parameters:
position – the character position
- get_activates_default() bool#
Returns whether pressing Enter will activate the default widget for the window containing the widget.
- get_attributes() AttrList | None#
Gets the attribute list that was set on the text widget.
See
set_attributes.
- get_buffer() EntryBuffer#
Get the entry buffer object which holds the text for this widget.
Gets the extra menu model of the text widget.
See
set_extra_menu.
- get_input_hints() InputHints#
Gets the input hints of the text widget.
- get_input_purpose() InputPurpose#
Gets the input purpose of the text widget.
- get_invisible_char() str#
Retrieves the character displayed when visibility is set to false.
Note that GTK does not compute this value unless it needs it, so the value returned by this function is not very useful unless it has been explicitly set with
set_invisible_char.
- get_max_length() int#
Retrieves the maximum allowed length of the contents.
See
set_max_length.This is equivalent to getting
self'sGtkEntryBufferand callingget_max_lengthon it.
- get_overwrite_mode() bool#
Gets whether text is overwritten when typing.
See
set_overwrite_mode.
- get_placeholder_text() str | None#
Retrieves the text that will be displayed when the text widget is empty and unfocused
See
set_placeholder_text.
- get_propagate_text_width() bool#
Returns whether the text widget will grow and shrink with the content.
- get_text_length() int#
Retrieves the length of the contents.
This is equivalent to getting
self'sGtkEntryBufferand callingget_lengthon it.
- grab_focus_without_selecting() bool#
Causes the text widget to have the keyboard focus.
It behaves like
grab_focus, except that it does not select the contents ofself.You only want to call this on some special entries which the user usually doesn’t want to replace all text in, such as search-as-you-type entries.
- set_activates_default(activates: bool) None#
Sets whether pressing Enter will activate the default widget.
This usually means that the dialog containing
selfwill be closed, since the default widget is usually one of the dialog buttons.- Parameters:
activates – true to activate window’s default widget on Enter keypress
- set_attributes(attrs: AttrList | None = None) None#
Apply attributes to the contents of the text widget.
- Parameters:
attrs – a list of style attributes
- set_buffer(buffer: EntryBuffer) None#
Set the entry buffer object which holds the text for this widget.
- Parameters:
buffer – an entry buffer object
- set_enable_emoji_completion(enable_emoji_completion: bool) None#
Sets whether Emoji completion is enabled.
If it is, typing ‘:’, followed by a recognized keyword, will pop up a window with suggested Emojis matching the keyword.
- Parameters:
enable_emoji_completion – true to enable Emoji completion
Sets a menu model to add to the context menu of the text widget.
- Parameters:
model – a menu model
- set_input_hints(hints: InputHints) None#
Sets hints that allow input methods to fine-tune their behaviour.
- Parameters:
hints – input hints
- set_input_purpose(purpose: InputPurpose) None#
Sets the input purpose of the text widget.
The input purpose can be used by on-screen keyboards and other input methods to adjust their behaviour.
- Parameters:
purpose – the input purpose
- set_invisible_char(ch: str) None#
Sets the character to use when in “password mode”.
By default, GTK picks the best invisible char available in the current font. If you set the invisible char to 0, then the user will get no feedback at all; there will be no text on the screen as they type.
- Parameters:
ch – a Unicode character
- set_max_length(length: int) None#
Sets the maximum allowed length of the contents.
If the current contents are longer than the given length, they will be truncated to fit.
This is equivalent to getting
self'sGtkEntryBufferand callingset_max_lengthon it.- Parameters:
length – the maximum length of the text, or 0 for no maximum. (other than the maximum length of entries.) The value passed in will be clamped to the range 0-65536
- set_overwrite_mode(overwrite: bool) None#
Sets whether the text is overwritten when typing.
- Parameters:
overwrite – new value
- set_placeholder_text(text: str | None = None) None#
Sets the text to be displayed when the text widget is empty and unfocused.
This can be used to give a visual hint of the expected contents of the text widget.
- Parameters:
text – a string to be displayed when
selfis empty and unfocused
- set_propagate_text_width(propagate_text_width: bool) None#
Sets whether the text widget should grow and shrink with the content.
- Parameters:
propagate_text_width – true to propagate the text width
- set_tabs(tabs: TabArray | None = None) None#
Sets tab stops for the text widget.
- Parameters:
tabs – tab stops
- set_truncate_multiline(truncate_multiline: bool) None#
Sets whether pasted text should be truncated to the first line.
- Parameters:
truncate_multiline – true to truncate multi-line text
- set_visibility(visible: bool) None#
Sets whether the contents of the text widget are visible or not.
When visibility is set to false, characters are displayed as the invisible char, and it will also appear that way when the text in the widget is copied to the clipboard.
By default, GTK picks the best invisible character available in the current font, but it can be changed with
set_invisible_char.Note that you probably want to set
input_purposetopasswordorpinto inform input methods about the purpose of this widget, in addition to setting visibility to false.- Parameters:
visible – true if the contents of the text widget are displayed as plain text
Properties#
- class Text
-
- props.attributes: AttrList#
A list of Pango attributes to apply to the text.
This is mainly useful to change the size or weight of the text.
The
PangoAttribute'sstart_indexandend_indexmust refer to theGtkEntryBuffertext, i.e. without the preedit string.
- props.buffer: EntryBuffer#
The
GtkEntryBufferobject which stores the text.
A menu model whose contents will be appended to the context menu.
- props.im_module: str#
Which input method module should be used.
See
IMMulticontext.Setting this to a non-
NULLvalue overrides the system-wide input method. See thegtk_im_modulesetting.
- props.input_hints: InputHints#
Additional hints that allow input methods to fine-tune their behaviour.
- props.input_purpose: InputPurpose#
The purpose of this text field.
This information can be used by on-screen keyboards and other input methods to adjust their behaviour.
Note that setting the purpose to
passwordorpinis independent from settingvisibility.
Signals#
- class Text.signals
- activate() None#
Emitted when the user hits the Enter key.
The default bindings for this signal are all forms of the Enter key.
- backspace() None#
Emitted when the user asks for it.
This is a keybinding signal.
The default bindings for this signal are Backspace and Shift+:kbd:
Backspace.
- copy_clipboard() None#
Emitted to copy the selection to the clipboard.
This is a keybinding signal.
The default bindings for this signal are Ctrl+:kbd:
cand Ctrl+:kbd:Insert.
- cut_clipboard() None#
Emitted to cut the selection to the clipboard.
This is a keybinding signal.
The default bindings for this signal are Ctrl+:kbd:
xand Shift+:kbd:Delete.
- delete_from_cursor(type: DeleteType, count: int) None#
Emitted when the user initiates a text deletion.
This is a keybinding signal.
If the
typeischars, GTK deletes the selection if there is one, otherwise it deletes the requested number of characters.The default bindings for this signal are Delete for deleting a character and Ctrl+:kbd:
Deletefor deleting a word.- Parameters:
type – the granularity of the deletion
count – the number of
typeunits to delete
- insert_at_cursor(string: str) None#
Emitted when the user initiates the insertion of a fixed string at the cursor.
This is a keybinding signal.
This signal has no default bindings.
- Parameters:
string – the string to insert
- insert_emoji() None#
Emitted to present the Emoji chooser.
This is a keybinding signal.
The default bindings for this signal are Ctrl+<kbd>.</kbd> and Ctrl+<kbd>;</kbd>
- move_cursor(step: MovementStep, count: int, extend: bool) None#
Emitted when the user initiates a cursor movement.
If the cursor is not visible in
self, this signal causes the viewport to be moved instead.This is a keybinding signal.
Applications should not connect to it, but may emit it with
signal_emit_by_nameif they need to control the cursor programmatically.The default bindings for this signal come in two variants, the variant with the Shift modifier extends the selection, the variant without it does not. There are too many key combinations to list them all here.
←, →, ↑, ↓ move by individual characters/lines
Ctrl+:kbd:
←, etc. move by words/paragraphsHome and End move to the ends of the buffer
- Parameters:
step – the granularity of the move
count – the number of
stepunits to moveextend – true if the move should extend the selection
- paste_clipboard() None#
Emitted to paste the contents of the clipboard.
This is a keybinding signal.
The default bindings for this signal are Ctrl+:kbd:
vand Shift+:kbd:Insert.
- preedit_changed(preedit: str) None#
Emitted when the preedit text changes.
If an input method is used, the typed text will not immediately be committed to the buffer. So if you are interested in the text, connect to this signal.
- Parameters:
preedit – the current preedit string
- toggle_overwrite() None#
Emitted to toggle the overwrite mode.
This is a keybinding signal.
The default bindings for this signal is Insert.
Fields#
- class Text
- parent_instance#